2010-09-01 76 views
2

所以我有这个类,包括一个名为class.php 一些自定义的功能,我还有一个文件名为config.php文件,包括函数中的类成员函数?

require('engine.class.php'); 
$engine = new engine; 

还需要的config.php到functions.php中运行一样:

require('functions.php'); 

我有一个functions.php的功能,使用$发动机如:

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

但是当我运行reuir页面ES的config.php我得到像一些错误:

Fatal error: Call to a member function mysql_query() on a non-object in ../somedir/functions.php on line 3 

回答

2

Global variables are indisputably evil。任何告诉你使用它们的人在处理使用它们的代码方面都没有经验。不幸的是,根据我的经验,使用全局变量的PHP编码器远远多于任何其他语言,主要原因在于无知。

几乎每个班级都应该是自我一致的,这意味着通过新的方式将其证明为一个对象的次数应该是无关紧要的。唯一的例外是Singleton模式,但是真实世界中需要单例模式的实例很少见,如这样罕见的,几乎所有这些使用都是一个没有要求的代码设计缺陷,这也是一个very bad thing


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); 
} 

我将愉快地elucidate更多,如果你需要它。

+1

谢谢,我想这样更好! – tazphoenix 2010-09-03 12:53:37

2

您将需要参考Variables scope。因为你不能访问$引擎,如果它不是全局的,或者在函数内部定义/声明它(singleton design pattern)。

编辑

你也可以把它作为一个参数传递给函数(之前忘记提到这一点)。

+0

或将它传递给函数。 – 2010-09-01 17:06:49

+0

在12年的PHP编程中,我从来没有**遇到过全球的需求,尽管我刚开始使用它们时已经大量使用它们。 只是...不要这样做! – 2010-09-01 17:21:25

+0

我从来没有建议使用'globals',只是说它是一种可用的方法。如果用户愿意,用户可以阅读“globals”,并决定他是否愿意使用它们,即使它们不是最好的方法。根据用途/需要,我的首选是singleton方法或参数。 – 2010-09-01 17:24:10