以下是我的简化代码
<?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之外引用其他类的唯一方法)如果被引用的类引用了另一个类,但这次是在它自己的类中。
为了更好地解释,程序如下:
$data
变量并将其发送到$input->page()
函数($input->page($data)
)。db
类,$input->page()
函数通过$database->queryExecute()
格式(db::queryExecute()
)将信息发送到db::queryExecute($data)
函数。::
,$database->queryExecute()
引用$database->queryEncode()
和$database->querySubmit()
使用$this->
运算符$this->queryEncode()
和{{1} }}),$this->querySubmit()
目前属于$this->
而非$input->
。那么解决方案是什么......以不同的方式引用另一个类(而不是$database->
)?在定义类时使用::
变量?使用$_GLOBAL
以外的其他内容?配置所有类以使用$this->
/ ABSTRACT
(或EXTENDS
)?
输出的以下错误是指INTERFACE
:
$var = $this->queryEncode($var);
答案 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);
}
}