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 不起作用,它只是说我不能在对象上下文之外使用它。

'self' 工作,所以谢谢。

您能否详细说明 Radu 提到的安全漏洞?


@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 回答