Вопрос

Просто небольшой вопрос.Скажем, вызовите метод следующим образом

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

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

Это было полезно?

Решение

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

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

Другие советы

register_shutdown_function()

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

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

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

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

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


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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top