2016-08-07 5 views
1

Boot 클래스를 만들었습니다. 파일 경로를 변경하는 메서드가 있으므로 사용자가이 클래스를 호출하여 다음과 같은 사용자 지정 경로를 설정할 수 있습니다.변경된 속성에 액세스 할 수 없습니다.

index.php 파일에 너무
class Boot 
{ 
    private static $_filePath = 'directory/'; 

    public function __construct() 
    { 
     require 'system.php'; 
    } 

    public function init() 
    { 
     new System(); 
    } 

    public function setFilePath($newDir) 
    { 
     $this->_filePath = $newDir; 
    } 

    public static function getFilePath() 
    { 
     return self::_filePath; 
    } 
} 

: 시스템 클래스에서 지금

require 'boot.php'; 

$b = new Boot(); 
$b->setFilePath('directories/'); 
$b->init(); 

나는 이런 식으로 뭔가를 호출

echo Boot::getFilePath(); 

이고 directories/으로 표시해야하지만 다시 기본값 인 directory이 표시됩니다.

이제는이 문제가 static 필드와 관련되어 있지만 어떻게 변경된 값에 액세스 할 수 있습니까? 감사.

답변

1

static이 있거나없는 클래스 변수는 이고 다른 변수는입니다.

class Boot 
{ 
    private $_filePath = 'directory/'; 

    public function __construct() 
    { 
     require 'system.php'; 
    } 

    public function init() 
    { 
     new System(); 
    } 

    public function setFilePath($newDir) 
    { 
     $this->_filePath = $newDir; 
    } 

    public function getFilePath() 
    { 
     return $this->_filePath; 
    } 
} 

그리고 또 다른 해결책은 getFilePath()

echo $b->getFilePath(); 

로 전화 :

하나의 해결책은 변수 선언에서 static를 제거하고 getPath 코드를 변경, 당신은 이미 Boot의 예를 정의 witn의 new을 가지고하는 것입니다 setFilePathgetFilePath을 모두 변경하려면

하지만 결국은 static variable 또는 property of an object에 액세스해야하는지 여부를 결정하는 실수를 저지르기 때문에 좋지 않습니다.

Boot의 인스턴스가 있고 그 속성을 가져 오거나 클래스에 정적 메서드 만 있고 Boot 인스턴스를 잊어 버린 경우 결정하는 것이 좋습니다.

+0

아니요, 저는'System'에'Boot'의 인스턴스가 없습니다. 내'index.php' 파일에서'Boot'의 인스턴스를 보았습니다 만,'boot' 내에 선언 된 클래스'system'의'boot' 내부에있는'$ _filePath'의 경로에 접근해야합니다. 나는 지금 더 명확한 지 모른다. –

+0

'System' 생성자에'$ b'를 인수로 넘깁니다. –

+0

이것이 문제를 해결할 수있는 유일한 해결책입니까? –

관련 문제