2012-09-13 7 views
0

클래스 내의 동일한 클래스에 속하는 함수를 어떻게 호출합니까?클래스 호출 자신의 함수 오류

나는이 :

class BaseConfig { 

public $page ; 
public $htmlRoot = 'assets/html/'; 

public function getPageTitle(){ 
    echo $page = $_GET['p']; 
} 

public function getContent(){ 
    $file = getPageTitle().'.php'; 
    return readfile($htmlRoot.$file); 
} 
} 

나는 그런데 내 자신의 간단한 프레임 워크를 만드는 오전

<?PHP Config::getContent();?> 

Fatal error: Call to undefined function getPageTitle() in C:\Xit\xampp\htdocs\IMS3\assets\Config.php on line 17 

를 호출 할 때 나는 다음과 같은 오류가 발생합니다.


감사합니다. $ this는 작동하지 않습니다. 단지 객체 컨텍스트에서 사용할 수 없다고 말합니다.

'자체'감사합니다.

Radu에서 언급 한 보안 구멍에 대해 자세히 설명해 주시겠습니까?


@ S3Mi 읽을 파일은 단지 html입니다. 이 유스 케이스에서는 내가 여전히 나쁜 짓을했거나 괜찮습니까? 함수가 $this-> 대신 다음 static 경우 당신이 self::은 대부분의 시간을 사용하는 것이

$file = $this->getPageTitle().'.php'; 

: : 함수가

$value = self::someStaticFunction(); 

경우

답변

3

당신은 함수 이름 앞에 $this->을 사용할 필요가 staticlate static binding을 사용하여 전화해야 할 수도있는 시나리오가 있습니다. static::someStaticFunction(). 그러나 그것은 문제가되는 클래스 디자인에 대한 암시이므로 완전성을 언급하고 있습니다.

0
$file = $this->getPageTitle().'.php' ; 
1
class BaseConfig { 

public $page ; 
public $htmlRoot = 'assets/html/'; 

public function getPageTitle(){ 
    return $this->page = $_GET['p']; 
} 

public function getContent(){ 
    $file = $this->getPageTitle().'.php'; 
    return readfile($this->htmlRoot.$file); 
} 
} 

나는 별도의 폴더에있는 파일을 가지고 있고 나는 당신이 거기에있는 중요한/기밀 데이터가없는 추측 것을 볼 수 있지만, 다른 폴더에 액세스가 해결되지 않습니다.

하나는 $ _GET [ 'p']를 '../index.php'로 설정하고 PHP 코드를 얻을 수 있습니다. 큰 보안 문제입니다.

입력 소거 및 유효성 검사에 대해 읽어 보시기 바랍니다.

readfile() 또는 원시 콘텐츠를 전달하는 모든 함수에 의해 .php 파일을 제공하지 마십시오. .php 파일은 PHP에 의해 해석되어야합니다. .php 코드 노출은 매우 나쁩니다.

관련 문제