PHP:为什么不找到类

时间:2015-09-09 06:05:21

标签: php class opcode interpretation

=== 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级?

感谢。

3 个答案:

答案 0 :(得分:4)

您在var_dump函数之后定义了一个类。将var_dump放在类中。然后它将返回true。

答案 1 :(得分:2)

PHP中的类仅在信息可用时才在编译时绑定。

因此,Base可以绑定,因为它没有依赖关系,但AB依赖于Base,当时尚未绑定AB已定义。因此他们的绑定被延迟到运行时。 (表示该类仅在执行了它们所定义的行之后才存在。)

尝试将Base类放在AB的定义之前,这些类也将是编译时绑定的。

答案 2 :(得分:1)

它是转储的顺序,把它们放在类代码下面。建议您首先放置基类Base,然后再声明其他类AB。只有在它们被制作之后,你才可以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)