2016-07-21 5 views
0

에서 $이를 사용하지 않을 수 있습니다 내가 가진 $ OK->를 nameB()를 사용할 때 나는 아무것도 얻지 못할 이유가 asign 값 클래스

Class something{ 
 
    public $token; 
 

 
    public function nameA() 
 
    { 
 
     $this->token = 'value'; 
 
    } 
 
    public function nameB(){ 
 
     echo $this->token; 
 
    } 
 
} 
 

 
$ok = new something(); 
 
$ok->nameB();

같은 클래스;?

+5

'new something();'은 자동으로'nameA()'를 자동으로 실행하지 않기 때문에; 'nameA()'를 호출하지 않는 한'token' 속성은 null 값인 –

답변

4

그런 다음 코드는 값이 제공 될 때까지 확인

Class something{ 
    public $token; 

    public function __construct() 
    { 
     $this->token = 'value'; 
    } 
    public function nameB(){ 
     echo $this->token; 
    } 
} 

$ok = new something(); 
$ok->nameB(); 
+0

입니다. 그러나 __construnt()를 사용하는 것 이외의 다른 값을 삽입 할 수있는 다른 방법입니까? – Ying

+0

코드로'nameA()'를 먼저 호출해야합니다. – RamRaider

+0

기술적으로 그들은'token'을 공개 클래스 멤버로 설정했습니다. 단지'$ ok-> token = "fred"를 통해 조작 할 수 있습니다; echo $ ok-> token; // print "fred"'클래스는 어떤 식 으로든 캡슐화되지 않습니다. – CD001

1

값을 지정하려면 먼저 nameA()으로 전화해야합니다. 여기서 토큰은 비어 있습니다. 당신이 클래스의 자연 생성자 방법을 사용한다면

1

속성 $token가 null이 될 것입니다. 클래스에서

이 일어날 수있는 유일한 방법은 nameA 메소드가 호출되는 경우, 또는 당신이 먼저해야 할 것입니다, 그래서 당신은 직접 속성을 조작 :

Class something{ 
    public $token; 

    public function nameA() 
    { 
     $this->token = 'value'; 
    } 
    public function nameB(){ 
     echo $this->token; 
    } 
} 

$ok = new something(); 
$ok->nameA(); //<--sets property 
//or direct manipulation: $ok->token = 'blah'; 
$ok->nameB(); //<-- reads and outputs it 

대체가 될 것이다

Class something{ 
    public $token; 

    public function __construct() 
    { 
     $this->token = 'value'; 
    } 
    public function nameB(){ 
     echo $this->token; 
    } 
} 

$ok = new something(); //<-- sets propery 
$ok->nameB(); //<--reads and outputs it 

또는 당신은 값으로 때에 프로퍼티를 초기화 할 수 있습니다 : 생성자의 속성을 설정

Class something{ 
    public $token = 'default'; 

    public function nameA() 
    { 
     $this->token = 'value'; 
    } 
    public function nameB(){ 
     echo $this->token; 
    } 
} 

$ok = new something(); 
$ok->nameB(); //outputs 'default' 
$ok->nameA(); //sets to 'value' 
$ok->nameB(); //outputs 'value' 
+0

좋은 답변 - "가장 빠른 손가락 우선"효과의 타락한 파울 ... – CD001