MyS*_*eam 17 php traits autoload
php5.4中的特征是否需要自动加载?
我还没有一个可以测试的环境,但我在php.net或traits页面上的__autoload上看不到任何提及它,但似乎特征在某些方面表现得像类.
有人试过这个吗?
更新:
我在这里找到了一个请求: https://bugs.php.net/bug.php?id = 61265(2012-03-03 13:10 UTC)
这似乎表明它确实有效,但没有明确说明.任何人都可以确认将为一个缺失的特征调用一个直的__autoload()吗?
更新:确认 - 它按预期工作 - __autoload将获取特征,虽然让php5.4第一次工作似乎是更大的挑战.
谢谢,MyStream
Pas*_*TIN 56
根据手册,该trait_exists()函数采用布尔值作为第二个参数,与自动加载有关; 这似乎表明特征和自动加载不是两个不相容的想法.
另外,如果你看一下该trait_exists()函数的源代码,你会看到一段代码,由第二个参数决定,看起来非常类似于你在源代码中看到的代码class_exists().
所以,我会说第二次特征和自动加载不是不相容的想法;-)
(我当前的计算机上没有安装PHP 5.4,所以我不能自己测试 - 但是,查看代码......)
[编辑]好的,我刚刚编译了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
Run Code Online (Sandbox Code Playgroud)
让我们尝试下面的一小部分代码,保存为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();
Run Code Online (Sandbox Code Playgroud)
基本上,如果自动加载适用于特征,"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
Run Code Online (Sandbox Code Playgroud)
因此,自动加载功能(这里是一个匿名的 - 但不改变一个东西)被称为
......这意味着使用PHP 5.4.3的特性会受到自动加载的影响.
| 归档时间: |
|
| 查看次数: |
9136 次 |
| 最近记录: |