2012-08-12 13 views
5

Tôi có một tình huống tốt đẹp khi có thể có khối catch nơi loại Exception được xác định trong thời gian chạy. Nó sẽ hoạt động như sau:PHP: Các khối catch động hoặc có lập trình

$someClassName = determineExceptionClass(); 

try { 
    $attempt->something(); 
} catch ($someClassName $e) { 
    echo 'Dynamic Exception'; 
} catch (Exception $e) { 
    echo 'Default Exception'; 
} 

Điều này có được không?

+0

Tại sao bạn cần làm điều đó? – Vulcan

+0

Tôi đang làm việc trên một thư viện các loại và tôi muốn người dùng cung cấp lớp được sử dụng cho ngoại lệ. – macinjosh

Trả lời

5

Điều đó không hiệu quả như tôi biết. Bạn có thể bắt chước chức năng đó bằng một tuyên bố điều khiển như sau:

$someClass = 'SomeException'; 

try 
{ 
    $some->thing(); 
} 
catch (Exception $e) 
{ 
    switch (get_class($e)) 
    { 
     case $someClass: 
      echo 'Dynamic exception.'; 
      break; 
     default: 
      echo 'Normal exception.'; 
    } 
} 
+0

Không thanh lịch như ý tưởng đầu tiên của tôi nhưng nó hoạt động giống nhau. Cảm ơn! – macinjosh