函数中的类成员函数?

时间:2010-09-01 16:55:13

标签: php class function object

所以我有这个包含一些名为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

2 个答案:

答案 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