=== 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级?
感谢。
答案 0 :(得分:4)
您在var_dump函数之后定义了一个类。将var_dump放在类中。然后它将返回true。
答案 1 :(得分:2)
PHP中的类仅在信息可用时才在编译时绑定。
因此,Base
可以绑定,因为它没有依赖关系,但A
和B
依赖于Base
,当时尚未绑定A
和B
已定义。因此他们的绑定被延迟到运行时。 (表示该类仅在执行了它们所定义的行之后才存在。)
尝试将Base
类放在A
和B
的定义之前,这些类也将是编译时绑定的。
答案 2 :(得分:1)
它是转储的顺序,把它们放在类代码下面。建议您首先放置基类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)