将方法分配给 variable/property 的语法
Syntax to assign a method to a variable/property
以下是非常简化的示例。我想知道在 PHP 中是否可行,如果可行,正确的语法是什么。
class A{
private $func = null;
private default_func(){
return $this;
}
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = $this->default_func; ********* NOT WORKING ******
}
}
public function run(){
$this->func();*************** NOT WORKING IF USER DOES NOT GIVE def func
}
}
//NOT WORKING
$C = new A;
$C->run();
//WORKS
$D = new A(function(){echo 1;});
$D->run();
我在这里尝试让开发人员能够将函数发送到 class 到 运行-时间覆盖默认行为。
我完全知道我可以简单地调用 else 中的默认函数,但如前所述,这是一个过度简化的示例。实际上有很多"default"函数。
您可以使用call_user_func()
调用您需要的函数。这应该让你管理你想打电话给哪一个。
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = [$this, 'default_func'];
}
call_user_func($this->func);
}
像这样将默认函数作为闭包包含在内
class A{
private $func = null;
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = function(){
return $this;
}
}
$this->func();
}
}
你可以这样做:
class A{
private $func = null;
private $default_func = function(){
return $this;
}
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
} else{
$this->func = $this->default_func;
}
$this->func();
}
}
但更好:
class A{
private $func = function(){
return $this;
};
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
}
$this->func();
}
}
以下是非常简化的示例。我想知道在 PHP 中是否可行,如果可行,正确的语法是什么。
class A{
private $func = null;
private default_func(){
return $this;
}
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = $this->default_func; ********* NOT WORKING ******
}
}
public function run(){
$this->func();*************** NOT WORKING IF USER DOES NOT GIVE def func
}
}
//NOT WORKING
$C = new A;
$C->run();
//WORKS
$D = new A(function(){echo 1;});
$D->run();
我在这里尝试让开发人员能够将函数发送到 class 到 运行-时间覆盖默认行为。
我完全知道我可以简单地调用 else 中的默认函数,但如前所述,这是一个过度简化的示例。实际上有很多"default"函数。
您可以使用call_user_func()
调用您需要的函数。这应该让你管理你想打电话给哪一个。
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = [$this, 'default_func'];
}
call_user_func($this->func);
}
像这样将默认函数作为闭包包含在内
class A{
private $func = null;
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = function(){
return $this;
}
}
$this->func();
}
}
你可以这样做:
class A{
private $func = null;
private $default_func = function(){
return $this;
}
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
} else{
$this->func = $this->default_func;
}
$this->func();
}
}
但更好:
class A{
private $func = function(){
return $this;
};
public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
}
$this->func();
}
}