2009-07-02 2 views
4

Просто быстрый вопрос. Вызвать метод, подобный этомуPHP Ответ на вопрос

mysql_pconnect("server","tator_w","password") 
       or die("Unable to connect to SQL server"); 

Можно ли вызвать метод «die», а не отображать текстовое сообщение? Если да, то как?

ответ

6

Вы бы лучше использовать, если заявление, а не полагаться на оценки короткого замыкания, если вы хотите сделать что-то более сложное, например:

if (!mysql_pconnect("server","tator_w","password")) { 
    call_a_function(); 
    //some other stuff 
    die(); //if you still want to die 
} 
+0

бы эту работу? mysql_pconnect ("server", "tator_w", "password") или вернуть false; –

+0

no, return - это языковая конструкция, которую вы не можете использовать в выражении. Вы можете сделать, если (! Mysql_pconnect (blah)) {return false; } –

+0

Не знаете, почему вы хотите сделать «или вернуть false», так как в этом случае вы можете просто вернуть значение первого операнда ... – Peter

0

Ну, не совсем, но вы просто делаете

if(!mysql_pconnect("server","tator_w","password")) { 
    $some_obj->some_method(); 
    exit(1); 
} 
0

Почему бы просто не поместить вызов функции, который возвращает строку?


function myDieFunction() 
{ 
    // do some stuff 

    return("I died!"); 
} 

die(myDieFunction()); 

Или вы могли бы попробовать register shutdown function

0

другой (но не так мило) путь:

mysql_pconnect("server","tator_w","password") 
    or foo() & bar() & die("Unable to connect to SQL server"); 

Примечание бинарный оператор & вместо булева оператора, чтобы иметь все функции, вызываемые.

+0

Позор PHP не имеет оператора запятой для подобных ситуаций. Но я полагаю, это просто путало бы 99% разработчиков PHP. – chaos

+0

@chaos: Конечно. Но это только ради полноты. Надеюсь, никто никогда не использует это. – Gumbo

3

register_shutdown_function()

Это позволяет зарегистрировать функцию, которая будет вызываться, когда система выходит. Тогда вы можете просто die() или exit() без параметра, который вызовет ваш метод.

(вы также можете найти set_error_handler() интересно, если немного не связаны)

0

Не будучи в состоянии подключиться к базе данных, вероятно, является серьезной проблемой - я считаю, что главной целью для использования исключений.

Если вы не можете подключиться к базе данных, проблему, вероятно, нужно обработать деликатно, и вы, вероятно, захотите зарегистрировать что-то о том, что пошло не так, и где это пошло не так, чтобы иметь возможность сделать код лучше, чтобы избежать проблема в будущем.

Просто быстрый эскиз, чтобы использовать исключения.

файл 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