2010-06-23 4 views
4

Ive가 보였지만 시도했지만 답변을 찾을 수 없습니다.PHP에서 객체 인스턴스화가없는 클래스 생성자 (메서드) 호출

PHP에서는 객체로 인스턴스화하지 않고 클래스의 멤버 함수 (해당 클래스가 매개 변수를 받기 위해 생성자를 필요로 할 때)를 호출 할 수 있습니까?

코드 예제 (오류를주는) : 당신은 인스턴스없이 인스턴스 수준의 방법을 호출 할 수 없습니다

<?php 

class Test { 
    private $end=""; 

    function __construct($value) { 
     $this->end=$value; 
    } 

    public function alert($value) { 
     echo $value." ".$this->end; 
    } 
} 

//this works: 
$example=new Test("world"); 
$example->alert("hello"); 

//this does not work: 
echo Test("world")::alert("hello"); 

?> 
+0

내가 에코 테스트 :: __ 구조 ("세계") : 경고 ("안녕하세요")를 생각했다; 작동하지 않을 수도 있지만, 한숨을 쉬다 – mykchan

+0

alert()을 정적 함수로 만들면 작업이 수행됩니다. –

답변

0

. 귀하의 구문 :

echo Test("world")::alert("hello"); 

는 많은 이해가되지 않습니다. 인라인 인스턴스를 만들고 즉시 삭제하거나 alert() 메서드에 암시적인 this 인스턴스가 없습니다.

가정 :

class Test { 
    public function __construct($message) { 
    $this->message = $message; 
    } 

    public function foo($message) { 
    echo "$this->message $message"; 
    } 
} 

당신이 할 수 있습니다

$t = new Test("Hello"); 
$t->foo("world"); 

하지만 PHP 구문을 허용하지 않습니다

new Test("Hello")->foo("world"); 

그렇지 않은 경우에 해당 될 것이다. PHP에서 몇 가지 예가 있습니다 (예 : 함수 반환에 대한 배열 인덱싱 사용). 그것이 바로 그 방법입니다. 샘플, D

당신은 "공장"을 사용할 수 있습니다 :

+1

인라인 인스턴스를 만들고 즉시 삭제합니다. 왜 내가이 프로세스에 변수를 할당해야하는지 알지 못한다 ... PHP/OOP와 같은 방식 일까? – mykchan

18

불행하게도 PHP는이 작업을 수행하는 지원하지 않습니다,하지만 당신은 창조하고 사람을 보면

<?php 

class Foo 
{ 
    private $__aaa = null; 

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

    public static function factory($aaa) 
    { 
     return new Foo($aaa); 
    } 

    public function doX() 
    { 
     return $this->__aaa * 2; 
    } 
} 

Foo::factory(10)->doX(); // outputs 20 
1

I, 너무, 한 형식에서 다른 형식으로 날짜를 변환하는 단일 표현식의 일부로이를 수행하는 한 줄짜리 탐색기를 찾고있었습니다. 단일 논리 연산이므로 한 줄의 코드에서이 작업을 수행하는 것이 좋습니다. 그래서,이 조금 애매하지만, 그것은 당신이 인스턴스화 한 줄 내에서 날짜 객체를 사용할 수 있습니다 :

$newDateString = ($d = new DateTime('2011-08-30') ? $d->format('F d, Y') : ''); 

한 줄 한 형식에서 다른 형식으로 날짜 문자열 변환하는 또 다른 방법은을 사용하는 것입니다

function convertDate($oldDateString,$newDateFormatString) { 
    $d = new DateTime($oldDateString); 
    return $d->format($newDateFormatString); 
} 

$myNewDate = convertDate($myOldDate,'F d, Y'); 

내가 객체 지향 접근 방식은 시원하고 필요하다 생각하지만 때로는 간단한 작업을 수행하는 데 너무 많은 단계를 필요로 지루한 될 수 있습니다 도우미 기능은 코드의 OO 부분을 관리 할 수 ​​있습니다.

4

그냥이 (> = 5.4 PHP에서) 수행

$t = (new Test("Hello"))->foo("world"); 
관련 문제