在网上查看代码或作为示例或教程的一部分时,我有时会some_function(array($this, 'something'))
这是什么意思?我从未见过这样的数组语法,这真的让我感到困惑。
一个例子是手册中注释中的代码:
<?php
class ClassAutoloader {
public function __construct() {
spl_autoload_register(array($this, 'loader'));
}
private function loader($className) {
echo 'Trying to load ', $className, ' via ', __METHOD__, "()'n";
include $className . '.php';
}
}
$autoloader = new ClassAutoloader();
$obj = new Class1();
$obj = new Class2();
?>
有人可以解释一下该语法的含义吗?
这是一个
PHP callable
。这意味着在对象上调用方法loader
$this
。
以下是包含更多信息的链接:http://php.net/manual/en/language.types.callable.php
这是
PHP中常用的数组语法。您可能会感到困惑,因为它不是保存在变量中,而是直接传递。为了澄清这一点,
spl_autoload_register(array($this, 'loader'));
相当于
$array = array($this, 'loader');
spl_autoload_register($array);
和
$array = array();
$array[0] = $this;
$array[1] = 'loader';
spl_autoload_register($array);
好吧,
它将单个参数交给函数spl_autoload_register()
。该参数的类型为 array
,包含两个元素。第一个是调用函数的对象,第二个是字符串。
some_function(array($this, 'something'))
只是您调用的一个函数,作为参数,您给它一个数组
可以重写成这个
some_function([$this, 'something'])
或
$arr = array($this, 'something');
some_function($arr);