类和调用非对象上的成员函数

时间:2015-02-17 19:21:57

标签: php class oop

这次我遇到了一个难题。我有:

[文件夹](文件)


结构目录

[类]
  - (class.page.php)
  - (class.main.php)
[芯]
  - (core.test.php)

现在 class.data.php

<?php
  class DataTools {

public function clean($string) {

    if (!empty($string)) {
        $string = addslashes($string);
        $string = mysql_real_escape_string($string);
        $string = (string)$string;
        $string = stripslashes($string);
        $string = str_replace(" ", "", $string);
        $string = str_replace("(", "", $string);
        $string = str_replace("=", "", $string);
        return $string;
    } else {
        echo "Error";
        die();
    }
}  

现在 class.page.php

<?php
  class Page {
  public function __construct {
  include "class.data.php";
  $data = New DataTools();
  }
?>

现在 core.test.php

<?php
  require_once "../class/class.page.php";
  $page = new Page;
  $nome = $data->clean("exemple"); // line 13
?>

当我打开class.test.php时,它会显示: 致命错误:在第13行上的/membri/khchapterzero/core/core.test.php中的非对象上调用成员函数clean()(这不重要因为我减少了页面主题,但原始页面中的行是我发布的,另一行是评论)

2 个答案:

答案 0 :(得分:0)

这似乎没问题,如果所有文件都在一个文件夹中,它可以正常工作,我尝试并没有错误。检查你的结构和名称。 我查了一下:

Test->
      class.data.php
      class.page.php
      core.test.php

仅包含文件名。 所以再次检查你的路径

答案 1 :(得分:0)

$ data在Page对象中定义,它不能作为全局范围内的变量使用。并且因为您没有将它存储为Page obejct的类成员,所以当Page的构造函数解析时它也会丢失。

解决此问题:

首先使$ data成为Page类的一个类成员,这样在构造函数完成后不会丢弃它

<?php
  class Page {
  public function __construct {
  require_once "../include/class.data.php";
  $this->data = New DataTools();
  }
?>

然后,在页面内访问此数据变量,而不是尝试直接调用$ data:

$nome = $page->data->clean("exemple");