2010-07-21 2 views
2

PHP5에서 OOP에 대한 질문이 있습니다. 다음과 같이 작성된 코드가 점점 더 많아졌습니다.PHP5에서 다중 oop 함수를 빌드하는 방법

$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5)); 

그러나이 방법을 만드는 방법을 모르겠습니다. 나는 여기서 누군가가 나를 도울 수 있기를 바랍니다. 0) 고마워요.

+0

가능 중복 (http://stackoverflow.com/questions/3724112/php-method-chaining) – dynamic

답변

8

자신의 클래스에서와 같은 메소드를 연결하는 열쇠는 객체를 반환하는 것입니다 (거의 항상 $this). 그러면 다음 메소드 호출을위한 객체로 사용됩니다.

과 같이 :

class example 
{ 
    public function a_function() 
    { 
     return $this; 
    } 

    public function first($some_array) 
    { 
     // do some stuff with $some_array, then... 
     return $this; 
    } 
    public function second($some_other_array) 
    { 
     // do some stuff 
     return $this; 
    } 
} 

$obj = new example(); 
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5)); 

주, 그것은 $this 이외의 객체를 반환하는 것이 가능하고, 체인 물건 위 정말 $a = $obj->first(...); $b = $a->second(...); 말을 짧은 방법을 뺀 설정 변수의 추함 당신은거야 통화 후 다시 사용하지 마십시오.

+4

다만 FYI [PHP 방법 체인?]이 기술이 사용되는 유창한 인터페이스 (http://en.wikipedia.org/wiki/Fluent_interface)를 만드십시오. –

+0

흠? 모든 것이 정상적으로 처리 될 것인가? :) – ParisNakitaKejser

+0

@Dennis Haarbrink : 이름이 내 마음을 어지럽게했다. 고마워요 :) – cHao

0
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5)); 

이 엄격 유효 PHP하지 않습니다,하지만이 자체가하는 당신이 방법은 어떤 또한 first()라고 호출하는 객체를 반환 ... 당신은 $ 객체 클래스의 메소드를 호출한다 말하고있다 second()이라는 메서드를 호출하는 개체를 반환합니다.

따라서 하나의 방법으로이 클래스가 반드시 하나의 클래스 일 필요는 없습니다.이 클래스는 일 수도 있고 클래스가 될 수도 있습니다.

같은 :

class AnotherClass { 
    public function AnotherClassMethod() { 
     return 'Hello World'; 
    } 
} 

class MyClass { 
    public function MyClassMethod() { 
     return new AnotherClass(); 
    } 
} 

$object = new MyClass(); 
echo $object->MyClassMethod()->AnotherClassMethod(); // Hello World 
관련 문제