Domanda

Solo una breve domanda. Dire una chiamata di un metodo in questo modo

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

Posso avere il 'die' chiamare un metodo piuttosto che visualizzare un messaggio di testo? Se sì, come?

È stato utile?

Soluzione

Si sarebbe meglio utilizzare un'istruzione if piuttosto che basarsi sulla valutazione di corto circuito, se si vuole fare qualcosa di più complicato, per esempio:.

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

Altri suggerimenti

register_shutdown_function()

E 'consente di registrare una funzione che verrà chiamata quando le uscite del sistema. Allora si può semplicemente die() o exit() senza un parametro, che chiamerà il metodo.

(si può anche trovare set_error_handler () interessante , se un po 'estranei)

Beh, non esattamente, ma basta fare

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

Perché non basta mettere in una chiamata di funzione che restituisce una stringa?


function myDieFunction()
{
     // do some stuff

     return("I died!");
}

die(myDieFunction());

Oppure si potrebbe provare il registrare la funzione di spegnimento

Un altro modo (ma non così bello):

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

Si noti l'operatore binario & invece di un operatore booleano di avere tutte le funzioni chiamate.

Non essendo in grado di connettersi al database è probabilmente un problema grave - Lo considero un obiettivo primario per l'uso delle eccezioni

.

Se non si è in grado di connettersi al database il problema probabilmente ha bisogno di essere maneggiato con delicatezza, e probabilmente si desidera registrare qualcosa su cosa è andato storto, e dove è andata male per essere in grado di rendere il codice meglio evitare il problema in futuro.

Basta un rapido schizzo di un modo per utilizzare le eccezioni.

file 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');

file 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top