gpt4 book ai didi

php5.4 自动加载特性

转载 作者:IT王子 更新时间:2023-10-29 00:09:32 24 4
gpt4 key购买 nike

php5.4 中的特征会自动加载吗?

我还没有一个测试环境,但我在 php.net 的 __autoload 或特征页面上看不到任何提及它,但似乎特征在某些方面表现得像类。

有人试过吗?

更新:

我在这里找到了一个请求: https://bugs.php.net/bug.php?id=61265 (2012-03-03 13:10 UTC)

这似乎表明它确实有效,但不是明确的。任何人都可以确认直接 __autoload() 将被称为缺少特征吗?

更新:已确认 - 它按预期工作 - __autoload 将获取特征,尽管让 php5.4 第一次工作似乎是更大的挑战。

谢谢,我的流

最佳答案

根据手册,trait_exists()函数将 bool 值作为第二个参数,与自动加载有关;这似乎表明特征和自动加载不是两个不兼容的想法。

另外,如果你看一下 trait_exists() 的源代码函数,你会看到一段代码,以第二个参数为条件,看起来与你在 class_exists() 的源代码中看到的非常相似。 .
所以,我要再说一遍,traits 和 autoload 并不是不相容的想法 ;-)

(我目前的电脑上没有安装 PHP 5.4,所以我不能自己测试 -- 但是,看看代码...)



[edit] 好的,我刚刚编译了 PHP 5.4.3,当前的稳定版本:

$ /usr/local/bin/php --version
PHP 5.4.3 (cli) (built: May 17 2012 21:11:42)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

让我们尝试以下一小段代码,它被保存为 temp-2.php,并尝试使用未在此文件中声明的特征:

spl_autoload_register(function ($name) {
echo "AUTOLOAD :: ";
var_dump($name);
});

class MyClass {
use MyTrait; // Let's try to use a trait that is not declared in this file
}

$obj = new MyClass();
$obj->plop();

基本上,如果自动加载适用于特征,“AUTOLOAD” 和我的特征名称应该显示。

那么,让我们尝试执行那部分代码——这是我得到的结果:

$ /usr/local/bin/php ./temp-2.php
AUTOLOAD :: string(7) "MyTrait"

Fatal error: Trait 'MyTrait' not found in /.../temp-2.php on line 13

因此,自动加载函数 (此处为匿名函数——但这不会改变任何东西) 被称为...
...这意味着 特征在 PHP 5.4.3 中受自动加载影响

关于php5.4 自动加载特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com