2012-01-11 21 views
7

Więc mam komunikat o błędzie, który zostaje wrzucony w jednym plikuJak wyjątek tablicy w php

$error_message = "Error received for " . $service . ": " . $_r['status'] . "\n" . "Message received: " . $_r['errors']; 
throw new My_Exception($error_message); 

aw innym pliku mam

try { 
    //blah blah 
} catch(My_Exception $e) { 
    var_export($e->getMessage()); 
} 

Problem, jednak jest to, że $ _r ['errors'] to ARRAY i dostaje $ e-> getMessage() po prostu wypisuje go jako "Array". Jak mogę zmodyfikować ten kod, aby uzyskać dostęp do tablicy?

Odpowiedz

8

Aby przekonwertować złożonych danych struktura jak tablicę na ciąg znaków (np komunikaty o błędach), można skorzystać z print_r­Docs i ustawienie to drugi parametr do TRUE:

... ": " . print_r($_r['status'], TRUE) . "\n" ... 
14

Problemem jest to, że Próbuję połączyć tablicę z ciągiem znaków. To zawsze się skończy.

Może powinieneś przekazać do tablicy wyjątek, abyś mógł później z niej skorzystać?

<?php 
class myException extends Exception { 

    private $params; 

    public function setParams(array $params) { 
     $this->params = $params; 
    } 

    public function getParams() { 
     return $this->params; 
    } 
} 

// later it can be used like this: 
try { 
    $exception = new myException('Error!'); 
    $exception->setParams(array('status' => 1, 'errors' => array()); 

    throw $exception; 
} 
catch (myException $e) { 
    // ... 
} 
?> 
+0

To jest zła forma, ponieważ łamie podstawowy interfejs wyjątków. Jeśli potrzebujesz przekazać kilka wartości - po prostu dodaj metodę, która je gromadzi i przechowuje. – Xeoncross

+0

@Xeoncross Masz rację. Naprawię to. – radmen

+1

+1 Perfect. Teraz obiekt zyskuje, a nie traci, funkcjonalność. – Xeoncross

0

więc przykład kodu jest trochę zły, ale zakładając

$_r['errors'] = array(
    'Message 1', 
    'Message 2', 
    'Message 3', 
    'Message 4', 
    'Message 5', 
); 

Następnie

$error_message = "Error received for " . $service . ": \n" . impolode("\n", $_r['errors']) . "\n" . "Message received: " . $_r['errors']; 
throw new My_Exception($error_message); 

Klucz bierze swoją tablicę komunikatów o błędach i łącząc je razem ze znakami nowej linii (lub cokolwiek)

Ale zgadzam się z komentarzem, że możesz używać Exception fram błędnie ework. Czy możesz opublikować to, co próbujesz zrobić?

Ogólna zasada polega na tym, że wyrzucasz wyjątek dla każdego unikalnego zdarzenia. Nie zbiera się mnóstwo komunikatów o błędach, a następnie rzuca je wszystkie naraz.