如何引用从一个类到另一个类的函数?

时间:2011-08-31 19:13:33

标签: php class reference external

以下是我的简化代码

<?php
  $database = new db();
  $file = new file();
  $input = new input();
  $output = new output();

  $data = "SELECT * FROM table;";
  $input->page($data);

  class db {
        public function queryExecute($var) {
              $var = $this->queryEncode($var);
              $var = $this->querySubmit($var);
        return $var;
        }

        public function queryEncode($var) {
              // Do somthing
        return $var;
        }

        public function querySubmit($var) {
              // Do somthing
        return $var;
        }
  }

问题是当我将其添加到代码中时:

  class input {
        public function page($data) {
              // Do something
              $pageQuery = db::queryExecute($data);
        }
  }

有了这个,我有两件事要做。首先,如果服务器设置为strict,我必须隐藏db::queryExecute($data);代码的错误。而现在是第二个问题。我似乎无法使用这行代码(这是我发现除了使用Abstract之外引用其他类的唯一方法)如果被引用的类引用了另一个类,但这次是在它自己的类中。

为了更好地解释,程序如下:

  1. 抓取$data变量并将其发送到$input->page()函数($input->page($data))。
  2. 引用db类,$input->page()函数通过$database->queryExecute()格式(db::queryExecute())将信息发送到db::queryExecute($data)函数。
  3. 但是因为我们正在使用::$database->queryExecute()引用$database->queryEncode()$database->querySubmit()使用$this->运算符$this->queryEncode()和{{1} }}),$this->querySubmit()目前属于$this->而非$input->
  4. 那么解决方案是什么......以不同的方式引用另一个类(而不是$database->)?在定义类时使用::变量?使用$_GLOBAL以外的其他内容?配置所有类以使用$this-> / ABSTRACT(或EXTENDS)?

    输出的以下错误是指INTERFACE

    $var = $this->queryEncode($var);

2 个答案:

答案 0 :(得分:0)

您只能对类的静态,常量或重写属性或方法使用双冒号运算符。请参阅此documentation。请改用->

答案 1 :(得分:0)

不要对非静态函数进行静态调用。将$db instance传递给页面,或提供对数据库的全局访问(通过全局注册表,单例或其他方法)。但最好的是,将依赖项 - 数据库实例传递给方法。

<?php
  $database = new db();
  $file = new file();
  $input = new input($database);
  $output = new output();

  $data = "SELECT * FROM table;";
  $input->page($data);

  class db {
        public function queryExecute($var) {
              $var = $this->queryEncode($var);
              $var = $this->querySubmit($var);
        return $var;
        }

        public function queryEncode($var) {
              // Do somthing
        return $var;
        }

        public function querySubmit($var) {
              // Do somthing
        return $var;
        }
  }

  class input {
    protected $_database;
    public function __construct($database) {
        $this->_database = $database;
    }
    public function page($data) {
          // Do something
          $pageQuery = $this->_database->queryExecute($data);
    }
  }