0xh*_*yuu 2 php methods magic-methods
我有这部分代码:
class FTPClient
{
public function __construct() {
$args_num=func_num_args();
echo $args_num;
$this->{"__construct".($args_num===0 ? '' : $args_num)}(func_get_args());
}
function __call($name,$args) {
echo $name,count($args),'<br/>';
}
public function open() {
echo 'open';
}
}
$o = new FTPClient('127.0.0.1','user','pass');
$o = new FTPClient();
$o = new FTPClient('127.0.0.1','user');
$o->close();
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
3__construct31 01__construct11 //Don't understand how this output came together?! 2__construct21 close0
有人会这么善良,可以解释一下这个输出的第二行吗?
$o = new FTPClient('127.0.0.1','user','pass');
你有3个参数,意思是3用这一行打印:
$args_num = func_num_args(); echo $args_num; //output: 3
之后,您尝试调用该方法__construct3()
:
$this->__construct3(func_get_args());
哪个不可访问,意味着__call()
被调用.在那个魔术方法中,你打印名称,这里__construct3
和参数的数量,这里的参数数组,意思是1
.
输出:
3__construct31
Run Code Online (Sandbox Code Playgroud)$o = new FTPClient();
你有0个参数,意味着0用这一行打印:
$args_num = func_num_args(); echo $args_num; //output: 0
之后你试图调用方法__construct()
,构造函数:
$this->__construct(func_get_args());
并且构造函数是可调用的,因此__call()
不会在此处调用.而是再次调用构造函数,但是使用一个包含参数数组的数组,这里是一个空数组.
现在在第二个调用中你有1个参数,意味着1用这一行打印:
$args_num = func_num_args(); echo $args_num; //output: 1
之后,您尝试调用该方法__construct1()
:
$this->__construct1(func_get_args());
现在__construct1()
无法访问,意味着__call()
被触发.在那个魔术方法中,你打印名称,这里__construct1
和参数的计数,这里是一个带参数数组的数组,意思是1
.
输出:
01__construct11
Run Code Online (Sandbox Code Playgroud)笔记:
__call()
当您尝试调用无法访问的方法时会被触发. 归档时间: |
|
查看次数: |
152 次 |
最近记录: |