我仍在寻找一种方法来恰当地表达它(我不是母语人士......)。
所以我有这个实现单例模式的类SQL
(出于显而易见的原因)我还有这个函数checkUsr()
,它使用SQL
之一来查询数据库方法
只要我不在checkUsr()
课程内拨打SQL
,一切正常。当我这样做时,脚本只是退出并显示一个空白页面 - 没有返回错误,没有抛出异常......发生了什么?我该如何解决这个问题?
编辑:
这里的一些代码:
class SQL
{
public static function singleton()
{
static $instance;
if(!isset($instance))
$instance = new SQL;
return $instance;
}
public function someOtherFun()
{
checkUsr();
}
public function tryLoginAuthor( $login, $sha1 )
{
// SQL query
}
}
function checkUsr()
{
if (!isset($_SESSION['login']) || !isset($_SESSION['sha1']))
throw new Exception('Not logged in', 1);
$SQL = SQL::singleton();
$res = $SQL->tryLoginAuthor($_SESSION['login'], $_SESSION['sha1']);
if (!isset($res[0]))
throw new Exception('Not logged in', 1);
}
因此,当我从SQL类中调用checkUsr
时,会出现问题。但是,当从其他一些班级调用时,它不会发生......
答案 0 :(得分:0)
您必须打开error_reporting,才能通过php查看错误消息,否则您将获得您描述的空白页面。 在index.php文件的顶部,包含以下内容:
ini_set('display_errors', true);
error_reporting(E_ALL | E_STRICT);
不要忘记在生产机器中将其关闭,这仅用于开发。
您已将变量$ instance声明为函数内的静态,而不是内部类。这是两件完全不同的事情。请参阅静态变量here的用法,并查看静态类属性here的用法。您需要后者,因此请将代码更改为:
class SQL {
static $instance;
public static function singleton()
{
if(!isset(self::$instance))
self::$instance = new SQL;
return self::$instance;
}
...
}
实现SQL类或任何类型的数据库访问作为单例是一个非常糟糕的主意,从长远来看,它会让你非常努力。如果事实证明你 需要支持另一个数据库,比如你需要从论坛中提取信息,这个数据库与你的网站不同,你会遇到严重的问题。