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は機能しません、それは私がオブジェクトコンテキストの外でそれを使うことができないと言うだけです。

「自己」はとても感謝して働いた。

ラドゥが言及したセキュリティホールについて詳しく教えてください。


@S3Mi読み取られているファイルは単なるhtmlです。このユースケースでは、私が行ったことはまだ悪いですか、それとも大丈夫ですか?

4

3 に答える 3

3

$this->関数名の前に使用する必要があります:

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

その場合、関数がstatic代わりに$this->使用される場合はself::、ほとんどの場合次のようになります。

$value = self::someStaticFunction();

関数が存在する場合は、レイトスタティックバインディングstatic使用して呼び出す必要があるシナリオも考えられます。ただし、これは問題のあるクラス設計を示唆しているため、完全を期すために言及しているだけです。static::someStaticFunction()

于 2012-09-13T08:39:33.660 に答える
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コードの公開は非常に悪いです。

于 2012-09-13T09:52:24.640 に答える
0
$file = $this->getPageTitle().'.php' ;
于 2012-09-13T08:40:08.077 に答える