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、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'));
刚刚测试过,以防万一它是其他东西 returns:
bool(true) bool(true) bool(true)
您在 var_dump 函数之后定义了一个 class。将下面的 var_dump 放到 class 中。那么它将 return 为真。
类 in PHP 仅在信息已经可用时在编译时绑定。
因此,Base
可以绑定,因为它没有依赖项,但是 A
和 B
依赖于 Base
,当时尚未绑定A
和 B
已定义。所以他们的绑定被延迟到 运行 时间。 (意味着 class 仅在它们定义的行被执行后才存在)。
尝试将 Base
class 放在 A
和 B
的定义之前,这些也会在编译时绑定。
=== 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、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'));
刚刚测试过,以防万一它是其他东西 returns:
bool(true) bool(true) bool(true)
您在 var_dump 函数之后定义了一个 class。将下面的 var_dump 放到 class 中。那么它将 return 为真。
类 in PHP 仅在信息已经可用时在编译时绑定。
因此,Base
可以绑定,因为它没有依赖项,但是 A
和 B
依赖于 Base
,当时尚未绑定A
和 B
已定义。所以他们的绑定被延迟到 运行 时间。 (意味着 class 仅在它们定义的行被执行后才存在)。
尝试将 Base
class 放在 A
和 B
的定义之前,这些也会在编译时绑定。