=== test.php ===
<?php
var_dump(class_exists('Base'));
var_dump(class_exists('A'));
var_dump(class_exists('B'));
class A extends Base {}
class B extends Base {}
class Base
{
public static function e()
{
static $number = 0;
$number++;
var_dump('number is: '.$number);
}
}
запустить его, результат:
bool(true)
bool(false)
bool(false)
класс A и класс B расширяет класс Base.
php нашел класс Base.
почему класс A и класс B не найдены?
Благодарю.
Вы определили класс после функции var_dump. Поместите var_dump ниже в класс. тогда он вернет истину.
Классы в PHP связаны только во время компиляции, когда информация уже доступна.
Так, Base
может быть связано, так как не имеет зависимостей, но A
а также B
зависит от Base
, который еще не связан в то время A
а также B
определены. Таким образом, их привязка задерживается во время выполнения. (означает, что класс существует только после выполнения строки, в которой они определены).
Попробуйте положить Base
класс до определения A
а также B
и они тоже будут связаны во время компиляции.
Это порядок свалок, поместите их ниже кода класса. Рекомендуется сначала поставить базовый класс, Base
затем объявите другие классы, A
а также B
, И только после того, как они были сделаны, вы можете на самом деле, var_dump
их существование.
Итак, код должен выглядеть примерно так:
<?php
class Base
{
public static function e()
{
static $number = 0;
$number++;
var_dump('number is: '.$number);
}
}
class A extends Base {}
class B extends Base {}
var_dump(class_exists('Base'));
var_dump(class_exists('A'));
var_dump(class_exists('B'));
Только что проверил, если это что-то еще, и он возвращает
bool(true) bool(true) bool(true)