【问题标题】:$a->b = new cl(); How to call $a->x() from within $a->b->c() without having to pass $a as an argument to c();$a->b = 新 cl();如何在 $a->b->c() 中调用 $a->x() 而无需将 $a 作为参数传递给 c();
【发布时间】:2015-10-02 08:56:55
【问题描述】:

PHP

class ClA {

    var $b;

    function clA()
    {
        $this->b = new ClB();
    }

    function x()
    {
      echo "testing";
    }
}        


class ClB {

    function clB()
    {

    }

    function c ($a)
    {
       $a->x();
    }
}

$a = new ClA();

$a->b->c($a);

如何在不传递$a的情况下调用c();

调用一个成员的方法 上一层的物体 到当前对象 正在调用谁的方法。

function c ()
{
   ??->x();
}

?? => object 到当前对象的上一级,该方法是该对象的成员

【问题讨论】:

  • @Rizier123 - 不,b 是一个属性
  • @MarkBaker 今天对我来说绝对太晚了。
  • 嗯,维护起来会很愉快

标签: php methods call siblings


【解决方案1】:
class ClA {

    public $b;

    public function __construct() {
        $this->b = new ClB($this);
    }

    public function x() {
      echo "testing";
    }
}        


class ClB {

    private $a;

    public function __construct($a) {
        $this->a = $a;
    }

    public function c () {
       $this->a->x();
    }
}

$a = new ClA();

$a->b->c();

Demo

请注意,我已将您的类从 PHP4 更新为 PHP5

【讨论】:

  • 我试图找出是否有任何方法可以避免在任何阶段传递 $a,方法是将其寻址为“对象的上一级对象,该对象是该方法是其成员的当前对象”。
  • 那么答案是“否”。变量不了解超出其直接范围的任何内容;特别是因为可以想象有几个“对象上一级到当前对象,该方法是其成员”的几个实例。
  • 属性没有这样的理解吗?在目标仅访问方法的情况下,例如当方法中的代码以任何方式不依赖于对象时,由于“对象上一级到当前对象”的多个实例而导致的这种歧义是否会成为一个因素?
猜你喜欢
  • 2011-05-30
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多