我正面临一个意外的行为,试图使用以下内容:
$object instanceof $class
Run Code Online (Sandbox Code Playgroud)
1/PHP的'instanceof'关键字和命名空间可以很好地协同工作,正如官方文档中所解释的那样.
2 /然而,有时候,反斜杠逃逸会产生更微妙(模糊不清楚)的行为,正如Ben在这篇好文章中所说的那样.
在我的代码深处,y设置了几个转储如下:
var_dump($object, $class);
var_dump($object instanceof $class);
Run Code Online (Sandbox Code Playgroud)
运行我的脚本时,它给我以下输出:
class Tools\Tests\Entity\testObject#226 (2) {
private $var_one =>
NULL
private $var_two =>
NULL
}
string(36) "Tools\Tests\Entity\testObject"
bool(false)
Run Code Online (Sandbox Code Playgroud)
我的第一个转储类与第二个转储中的字符串严格相同.但是,我的instanceof dump返回FALSE.为什么?
我玩反斜杠,没有运气.也许我搞砸了名字空间?问题是我真的不知道如何进一步排除故障.我该怎么办?
Cra*_*tic 18
您可以使用命名空间测试实例,但使用完全限定的类名.
为了你的测试,我会这样做:
$class = "\\Tools\\Tests\\Entity\\testObject";
$object = new $class;
var_dump($object instanceof $class); //bool(true)
Run Code Online (Sandbox Code Playgroud)
您也可以使用单引号测试这种方式,而不用担心转义反斜杠并节省一些按键.
$class = '\Tools\Tests\Entity\testObject';
$object = new $class;
var_dump($object instanceof $class); //bool(true)
Run Code Online (Sandbox Code Playgroud)
我使用更简单的变体
var_dump($object instanceof \Tools\Tests\Entity\testClass);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9661 次 |
| 最近记录: |