PHP: почему не найден класс

=== 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 не найдены?

Благодарю.

1

Решение

Вы определили класс после функции var_dump. Поместите var_dump ниже в класс. тогда он вернет истину.

4

Другие решения

Классы в PHP связаны только во время компиляции, когда информация уже доступна.

Так, Base может быть связано, так как не имеет зависимостей, но A а также B зависит от Base, который еще не связан в то время A а также B определены. Таким образом, их привязка задерживается во время выполнения. (означает, что класс существует только после выполнения строки, в которой они определены).

Попробуйте положить Base класс до определения A а также B и они тоже будут связаны во время компиляции.

2

Это порядок свалок, поместите их ниже кода класса. Рекомендуется сначала поставить базовый класс, 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)
1
По вопросам рекламы [email protected]