bagaimana memahami Kelas harus didefinisikan sebelum digunakan dalam manual php kata kunci yang diperluas

Saya mendapatkan 2 file php a.php

<?php
class A extends B {}
class B{}

php a.php
>>>tidak ada kesalahan

b.php

<?php
class A extends B {}
class B extends C {}
class C{}

php b.php
>>>> Fatal error: Class 'B' not found in b.php on line 2

Menurut [manual php.net]:

Kelas harus didefinisikan sebelum digunakan! Jika Anda ingin kelas Named_Cart memperluas kelas Cart, Anda harus mendefinisikan kelas Cart terlebih dahulu. Jika Anda ingin membuat kelas lain bernama Yellow_named_cart berdasarkan kelas Named_Cart Anda harus mendefinisikan Named_Cart terlebih dahulu. Singkatnya: urutan pendefinisian kelas itu penting.

jadi siapa saja tolong jelaskan mengapa a.php tidak mendapatkan "Kesalahan Fatal".


person Donald    schedule 27.08.2013    source sumber
comment
itu berperilaku seperti suatu fungsi :(   -  person    schedule 27.08.2013
comment
@MarkBaker memberikan kesalahan yang sama seperti yang dinyatakan OP.   -  person Konsole    schedule 27.08.2013


Jawaban (1)


Menurut dokumen Warisan PHP.

Kecuali jika autoloading digunakan, maka kelas harus ditentukan sebelum digunakan. Jika suatu kelas memperluas kelas lain, maka kelas induk harus dideklarasikan sebelum struktur kelas anak. Aturan ini berlaku untuk kelas yang mewarisi kelas dan antarmuka lain.

Contoh ini tidak memiliki ketergantungan untuk kelas B dan D:

<?php
 //This will work
 class A extends B {} //searches for class B in current document
 class B {}

 class C extends D{}
 class D{}

Kelas B bergantung pada Kelas C

<?php
 //This will not work
 class A extends B {} //searches for class B in current document but class B has dependencies
 class B extends C {}
 class C{}

Untuk penyertaan dan kebutuhan, Anda harus menyertakan file sebelum Anda menggunakan fungsi/kelas yang dideklarasikan dalam file tersebut.

Lihat juga pemuatan otomatis.

person Konsole    schedule 27.08.2013
comment
saya masih bingung dengan 2 poin 1.mengapa fungsi __autoload terpicu sementara saya belum memanggilnya secara eksplisit 2.jika ini memicu __autoload untuk menemukan kelas dalam file saat ini, mengapa b.php tidak berfungsi? atau ini tidak akan dipicu secara rekursif? terimakasih banyak ;) - person Donald; 27.08.2013
comment
Fungsi autoload tidak terpicu dalam kasus ini. Anda perlu menulis beberapa kode untuk memuat kelas secara otomatis di php. Saya belum mencobanya tetapi menggunakan autoload mungkin menyelesaikan masalah ini. Berikut adalah tutorial bagus tentang penggunaan autoload di php codeforest.net/autoload-your- kelas-di-php - person Konsole; 27.08.2013
comment
saya baru saja mencoba...pemuatan otomatis tidak terpicu di sini, dan fungsi ini tidak akan menyelesaikan masalah, karena memuat file itu sendiri akan menyebabkan masalah lain yang tidak dapat ditentukan. - person Donald; 27.08.2013
comment
tampaknya kuncinya adalah mengapa ketergantungan ganda menimbulkan masalah sedangkan ketergantungan tunggal tidak - person Donald; 27.08.2013