2015-01-07 2 views
-2

개체가 인스턴스화되지 않았거나 클래스 내에서 무언가를 호출해야 할 때 정적 메서드가 사용된다고 들었습니다.메소드 외부에서 클래스 코드를 실행할 수없는 이유는 무엇입니까?

class Show_files{ 
    static private $person = 1;  
    echo Show_files::$person++; 
} 

나는 내가 인스턴스 또는 방법에 넣어 경우가 작동합니다 알고 있지만, 지금처럼 왜 작동하지 않습니다,이 둘을 보여주고 싶습니다?

+4

때문에 호출합니다. –

+0

그것은 작동합니다.하지만 클래스의 함수 안에서 echo를 수행해야합니다. –

+2

@ShaifulIslam : -1, 그렇지 않습니다. 그것은 불법적 인 구문입니다. 클래스 속성 정의에는 표현식을 사용할 수 없습니다. –

답변

0

echo을 메소드 안에 넣어야합니다. 그리고 그것을 다른 곳으로 부르세요 (예를 들어, 당신의 견해). 보기 : http://php.net/manual/en/language.oop5.basic.php

+0

음, 정확한 표현이 아닙니다. 뷰/컨트롤러/함수/무엇이든 –

+0

"메소드"가 아니라 미리로드 한 클래스를 호출 할 수 있습니다. 객체 내부의 함수는 메소드입니다. –

0

클래스 외부에서 코드를 실행하려고 시도하지만 메소드 외부에서 실행하려고합니다. 이는 잘못된 구문입니다. 방법의 "외부"갈 수있는 유일한 일이 속성 정의입니다 :

class foo { 
    static $x = 0; // simple variable creation, fixed values. A-OK 
    public $y = 1+1; // illegal - expressions not permitted 
    private $z = self::$y++; // double-illegal 
    echo self::$z // illegal - executing code 
} 

은 $ Z의 정의는 두 가지 수준에서 불법입니다 - 당신이 그것을 아직도 구문 분석되는 동안 객체에서 읽어 $ z를 만들 수 없습니다/정의 , 당신은 속성 정의에서 "코드를 실행"(즉, "표현") 할 수 없습니다.

0

PHP 구문과 일치하지 않게됩니다. 메소드 내부에 배치해야합니다. Ex.

Show_files{ 
static private $person = 1;  
public static function show() 
{ 
    echo self::person++; 
} 
} 

다음 Show_files :: 쇼()

0

class Show_files{ 
    static private $person = 1;  

    public static function getPersonCount() { 
     self::$person++; 
     echo self::$person; 
     return; 
    } 

} 

로 변경을하고 클래스 본문 내부의 임의의 문장을 가질 수는

Show_files::getPersonCount(); 
관련 문제