1

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

谢谢。

4

3 回答 3

3

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

于 2015-09-09T06:09:20.493 回答
2

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

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

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

于 2015-09-09T15:14:13.180 回答
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)
于 2015-09-09T06:07:48.673 回答