2014-01-14 2 views
0

Лучше, чем несколько слов, что я хочу сделать, это:Метода возврата другого типа вара в зависимости от контекста

  1. Вернуться строка

    $obj->method(); 
    
  2. В этом случае, я хочу method() к возвращает объект

    $obj->method()->method2(); 
    

Возможно ли это? И если возможно, кто-то может мне помочь?

+2

Вызываемый метод не знает, в каком контексте он был вызван. Поэтому он не может определить, должен ли он возвращать результат или сам. – ToBe

+0

Вы можете передать параметр 'method()', чтобы сообщить ему, что нужно вернуть. –

+0

Пожалуйста, прекратите пытаться добавить * magic * к вашему коду. Это всегда ужасная идея. –

ответ

2

Нет. Метод method() не может знать, будет ли он использоваться в качестве строки или как объекта. Единственное, что вы можете сделать что-то приходит около ваше ожидание будет иметь его вернуть объект с помощью метода __toString():

<?php 

class YourObject { 
    public function method2() { 
     // ... 
    } 

    public function __toString() { 
     return 'some string'; 
    } 
} 

?> 

и имеют $obj->method() вернуть экземпляр этого класса. Вы можете использовать это как строку (echo $obj->method();), а также объект ($obj->method->method2();).

+0

Я думаю, это единственный способ решить эту проблему. Зависит ли он от того, как он используется после его возврата. –

+0

Thx! Он работает, как я хочу! – Julien

0

Передайте простой логический метод, чтобы сообщить ему, что возвращать.

Смежные вопросы