类的静态函数中的PHP-mysql_query() 形势
我在数据库中有一个包含作业类型的表,基本上由标签和价格定义。我试图做一个简单的类的静态函数中的PHP-mysql_query() 形势,php,class,visibility,global,Php,Class,Visibility,Global,我在数据库中有一个包含作业类型的表,基本上由标签和价格定义。我试图做一个简单的SELECT*fromJobType,但似乎无法让它工作,尽管我在代码的其余部分反复使用了相同的块。这里的主要区别在于,它是一个试图执行函数的单例 问题是,只要我取消注释行$rs\u job\u types=mysql\u query($query\u job\u types,$vtconnection)或die(mysql\u error())页面将在代码中的这个特定点停止加载 代码 下面是我的函数的代码getJob
SELECT*fromJobType
,但似乎无法让它工作,尽管我在代码的其余部分反复使用了相同的块。这里的主要区别在于,它是一个试图执行函数的单例
问题是,只要我取消注释行$rs\u job\u types=mysql\u query($query\u job\u types,$vtconnection)或die(mysql\u error())代码>页面将在代码中的这个特定点停止加载
代码
下面是我的函数的代码getJobTypes()
:
我这样称呼他:
$jt = JobTypes::getJobTypes();
以下是我的单身模式:
class Singleton{
private static $instances = array();
final private function __construct(){
}
final public function __clone(){
trigger_error('You don\'t clone a singleton!', E_USER_ERROR);
}
final public static function getInstance(){
$c = get_called_class();
if(!isset(self::$instances[$c])){
self::$instances[$c] = new $c;
}
return self::$instances[$c];
}
}
我已经在头脑中解决了这个问题,对getJobtypes()
函数中的所有内容进行了注释,并逐步取消注释。我发现问题确实发生在mysql\u query()
行上,但似乎无法找出原因。我的代码中是否有明显的错误
解决了的
正如这里所建议的,我使用了global$vtconnection,$database\vtconnection代码>在我的静态函数开始时,一切都很顺利。这不是一个最佳的解决办法,但它指出了我现在将努力解决的范围问题
我还摆脱了单例模式。最明显的是$database\u vtconnection
$vtconnection
在getJobTypes
函数中没有定义。如果它们是类的一部分,则需要$this
(对象)或self
(静态)引用。更可能的情况是,您试图使用全局变量,在这种情况下,您必须将它们拉入函数的范围
可以自动连接(如果未提供$vtconnection
),但仅当它知道如何连接时-存在以前的连接(或可能的带有db/host/user/pass的INI配置)
要将它们拉入范围,您需要在函数开头添加一行:
global $vtconnection,$database_vtconnection;`
。。。或者使用$GLOBALS
超全局数组:
mysql_select_db($GLOBALS["database_vtconnection"],$GLOBALS["vtconnection"]);
对于记录来说,使用globals并不是一个特别好的解决方案。什么是“问题”?错误消息?我建议扔掉Singleton基类,在JobTypes类中这样做。考虑一下你是否真的应该在这里使用单体,因为大多数时候你不应该使用。单身人士之所以不好,原因和全球人一样。一个简单的静态函数通常就足够了。我一回到家就会尝试这个。我的示例中只包含了代码片段,但我有一个单独的vtconnection.php文件,我需要在页面开始处使用_once()。我将通过尝试回显我正在使用的所有变量来确保这不是一个范围问题。您在问题中说的正好相反-如果这不是getJobTypes
的全部代码,那么就不要说“下面是我的函数getJobTypes()的代码”,很抱歉造成混淆。getJobTypes()函数已经完成,正如您在这里看到的,vtconnection.php在页面的全局范围内是“必需的”。@Justin Huss仍然没有将变量引入JobTypes::getJobTypes
函数
mysql_select_db($GLOBALS["database_vtconnection"],$GLOBALS["vtconnection"]);