PHP: 为什么找不到 class

PHP: why not found class

=== 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)

class A 和 class B 扩展 class 基础。

php 找到 class 基地。

为什么找不到 class A 和 class B?

谢谢。

这是转储的顺序,将它们放在 class 代码下方。建议您先放置基数 class、Base,然后再声明其他 class、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'));

刚刚测试过,以防万一它是其他东西 returns:

bool(true) bool(true) bool(true)

您在 var_dump 函数之后定义了一个 class。将下面的 var_dump 放到 class 中。那么它将 return 为真。

类 in PHP 仅在信息已经可用时在编译时绑定。

因此,Base 可以绑定,因为它没有依赖项,但是 AB 依赖于 Base,当时尚未绑定AB 已定义。所以他们的绑定被延迟到 运行 时间。 (意味着 class 仅在它们定义的行被执行后才存在)。

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