所以我有这个包含一些名为class.php的自定义函数的类 我有另一个名为config.php的文件,其中包含
require('engine.class.php');
$engine = new engine;
config.php还要求functions.php像:
一样运行require('functions.php');
我在functions.php中有一个使用$ engine的函数,例如:
function login($username, $password){
return $engine->mysql_query('SELECT `user_id` WH...', 'array);//this is custom function in class.php
}
但是当我运行重新使用config.php的页面时,我得到了一些错误,如:
Fatal error: Call to a member function mysql_query() on a non-object in ../somedir/functions.php on line 3
答案 0 :(得分:2)
您需要参考Variables scope。因为你不能访问$ engine而不是全局的,或者在函数内部定义/声明它(singleton design pattern)。
修改强>
您也可以将其作为参数传递给该函数(之前忘记提及此内容)。
答案 1 :(得分:2)
Global variables are indisputably evil。任何告诉你使用它们的人在处理使用它们的代码时都没有范围经验。不幸的是,根据我的经验,使用全局变量的PHP编码器远远超过任何其他语言,主要是由于无知。
事实上,每个班级都应该是自我一致的,这意味着你通过新事物证明它成为一个物体的次数并不重要。唯一的例外是Singleton模式,但实际上需要单例的实例如此罕见,几乎每次使用它们都是一个未被称为的设计缺陷,只能紧密地耦合代码,这也是一个{ {3}}
PHP缓存数据库连接,因此您可以在同一程序中拥有无限制的mysql_connect(),并且每个页面加载只会连接一次(除非您手动关闭它)。所以立即从config.php中删除$引擎并将所有代码重写为:
function login($username, $password)
{
$engine = new Engine;
//this is custom function in class.php
return $engine->mysql_query('SELECT `user_id` WH...', 'array);
}
如果你需要,我会很高兴very bad thing。