2015-07-13 6 views
0

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); 

Как звонить с() без необходимости проходить $ а;

Вызов метода, который является членом объекта, который на один уровень выше к текущему объекту , метод которого вызывается.

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

?? => Объект на один уровень вверх, чтобы текущий объект из которых этот метод является членом

+0

@ Rizier123 - Нет, 'б 'является свойством –

+0

@MarkBaker Определенно, слишком поздно для меня сегодня. – Rizier123

+2

хорошо было бы так радостно поддерживать –

ответ

4
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

Обратите внимание, что я обновил свои классы PHP5 от PHP4

+0

Я пытался выяснить, есть ли способ избежать передачи $ a на любом этапе, обратившись к нему как к объекту Один уровень до текущего объекта, из которого этот метод является членом ». –

+1

Тогда андер «Нет». Переменные не понимают ничего, кроме их непосредственного охвата; тем более, что, возможно, может быть несколько экземпляров «объект одного уровня до текущего объекта, из которого этот метод является членом». –

+0

Не свойства имеют такое понимание? Будет ли эта неоднозначность из-за множественных экземпляров «объекта на один уровень до текущего объекта» фактором в тех случаях, когда целью является доступ только к методам, скажем, когда код внутри метода никоим образом не зависит от объекта? –