Php 函数中的类成员函数?

Php 函数中的类成员函数?,php,class,function,object,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){ r

所以我有一个类,它包含一些名为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
}
但是,当我运行reuires config.php页面时,会出现如下错误:

Fatal error: Call to a member function mysql_query() on a non-object in ../somedir/functions.php on line 3
您需要参考。因为如果$engine不是全局的,或者在函数中定义/声明它(我想到),您就无法访问它

编辑

您还可以将其作为参数传递给函数(以前忘记提到这一点)

。任何告诉您使用它们的人都没有处理使用它们的代码的范围经验。不幸的是,在我的经验中,使用globals的PHP程序员远远多于任何其他语言,这主要是由于无知

事实上,每个类都应该是自一致的,这意味着无论您通过新的方法将其充实到对象中多少次,都应该是无关紧要的。唯一的例外是单例模式,但现实世界中需要单例的情况非常罕见,以至于几乎每一次使用单例都是一个不必要的设计缺陷,只会使代码紧密耦合,这也是一个问题


PHP缓存DB连接,因此在同一个程序中可以有一个不受限制的mysql_connect(),并且每次加载页面时它只连接一次(除非手动关闭)。因此,请立即从config.php中删除$engine,并将所有代码重写为:

function login($username, $password)
{
    $engine = new Engine;
    //this is custom function in class.php
    return $engine->mysql_query('SELECT `user_id` WH...', 'array);
}

如果您需要,我会更高兴。

或将其传递给函数。在12年的PHP编程中,我从未遇到过对全局函数的需要,尽管我刚开始时大量使用全局函数。只是不要。。。做吧!我从来没有建议使用
globals
,只是说这是一种可以使用的方法。如果用户愿意,可以阅读
globals
,并决定是否使用它们,这是他的选择,即使它们不是最好的方法。我的首选是singleton方法或参数,具体取决于使用情况/需要。谢谢,我想这样更好!