我有一个快速的问题。假设我这样调用一个方法:
mysql_pconnect("server","tator_w","password")
or die("Unable to connect to SQL server");
我可以让“die”调用一个方法而不是显示文本消息吗?如果可以,怎么做?
if (!mysql_pconnect("server","tator_w","password")) {
call_a_function();
//some other stuff
die(); //if you still want to die
}
该函数允许您注册一个在系统退出时调用的函数。然后,您可以简单地使用die()
或exit()
而不带参数来调用您的方法。
(如果您有兴趣,也可以查看set_error_handler(),虽然它与本函数略有不同)
function myDieFunction()
{
// do some stuff
return("I died!");
}
die(myDieFunction());
或者你可以尝试注册关机函数
另一种(但不太好的)方法:
mysql_pconnect("server","tator_w","password")
or foo() & bar() & die("Unable to connect to SQL server");
&
而不是布尔运算符,以调用所有函数。无法连接到数据库可能是一个严重的问题 - 我认为这是使用异常的主要目标。
如果您无法连接到数据库,则可能需要小心处理该问题,并且您可能希望记录有关出了什么问题以及出了什么问题的位置,以便能够使您的代码更好地避免将来出现问题。
只需快速草拟一种使用异常的方法。
文件 view_cart.php
<?php
try
{
require_once('bootstrap.php');
require_once('cart.php');
require('header.php');
// Get the items in the cart from database
$items = Cart::getItems();
// Display them to the user
foreach ($items as $item)
{
echo $item->name.', '$item->price.'<br />';
}
}
catch (Exception $e)
{
// Log the exception, it will contain useful info like
// the call stack (functions run, paramaters sent to them etc)
Log::LogException($e);
// Tell the user something nice about what happened
header('Location: technical_problem.html');
}
require('footer.php');
文件 bootstrap.php
<?php
$result = mysql_pconnect("server", "tator_w", "password");
if ($result === false)
{
throw new Exception('Failed to connect to database');
}
// Select database
// Setup user session
// Etc
嗯,不完全是这样,但你只需要这样做
if(!mysql_pconnect("server","tator_w","password")) {
$some_obj->some_method();
exit(1);
}