如何将 THIS 绑定到 PHP 中的外部函数


how to bind THIS to an external function in php

我花了很多时间学习javascript。现在我来到了php世界,当我开始用php学习OOP时,一开始我感到有点迷茫。在javascript中,我可以绑定/应用/调用外部函数来完成一些特定的工作。如何在 php 中管理此行为?在这里,我有使用应用方法的简单JavaScript代码。我如何使用 php 做同样的事情。我知道阶级宣言是不同的。可变可见性也存在。我只想知道有没有办法模仿 php 中的绑定/应用/调用功能?

JS代码如下:

function Person(name,haircolor){
   this.name=name;
   this.haircolor=haircolor;
}
function display(){
  console.log(this.name+' has '+this.haircolor+' hair.');
}
var person1=new Person('zami','black');
display.apply(person1);

调用时绑定是Javascript特有的一个特性(不是唯一的,而是很大程度上)。大多数其他语言在此之前不可逆地绑定对象上下文。在 PHP 中你能做的最好的事情显示在 Closure 类的手册中,匿名函数的内部实现:

class A {
    function __construct($val) {
        $this->val = $val;
    }
    function getClosure() {
        //returns closure bound to this object and scope
        return function() { return $this->val; };
    }
}
$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(); // 1
$cl = $cl->bindTo($ob2);
echo $cl(); // 2
不可能

将函数/闭包绑定到任意对象;无论如何,您最多可以将其绑定到它所引用的同一类的其他实例。也可以通过 ReflectionMethod::invoke .但同样,这真的不是PHP(以及大多数传统的OOP语言)的工作方式,你永远不应该出于好奇心以外的目的以这种方式编写代码。


this$this只是另一个变量。他们唯一要做的就是隐式携带状态,而无需将它们传递给您调用的所有函数。在 PHP 中,它进一步有助于封装,因为$this可以具有无法从类外部访问的值;甚至Javascript也不是这种情况。因此,没有必要以这种方式进行编程。任何你能用(理论)$foo->bar->apply($baz)表达的东西,你都可以写$foo->bar($baz)bar($baz)