2013-02-25 22 views
10

Sau đây sẽ làm việc trong PHP 5.3, nhưng không phải trong PHP 5.4.10.Thái độ của PHP đối với ngoại lệ có thay đổi trong phiên bản 5.4.10 không?

throw new Custom_Exception(); 

class Custom_Exception extends Exception {} 

PHP 5.4.10 sẽ phản ứng với các lỗi nghiêm trọng sau đây:

Class 'Custom_Exception' not found in ...

Có ai biết tại sao?

p.s. Di chuyển định nghĩa lớp trên câu lệnh ném sửa lỗi.

+0

@nathanhayfield, Không, nó chỉ xảy ra với 'ném'. –

+1

Có thể là lỗi, hoạt động cả trong '5.4.9' và '5.5-dev': http://codepad.viper-7.com/XTloFa – Niko

+1

@Niko, Theo dịch vụ sau, nó hoạt động trong 5.4.10 hoặc là không - http://sandbox.onlinephpfunctions.com/. Bạn đã thử nghiệm nó trên một máy thật chưa? –

Trả lời

-3

Tôi nghĩ rằng nó giả sử là ngược lại

class Custom_Exception extends Exception {} 

throw new Custom_Exception(); 

vì bạn phải tạo Custom_Exception ChildClass() trước khi gọi nó.

+0

Chắc chắn, nhưng tại sao? ... –

+0

Tôi không chắc chắn, nhưng không phải là nó giống như nói echo $ string; sau đó đặt $ string = "Hello World"; trên dòng thứ hai? – Richie

+2

Điều này không đúng. Một tuyên bố lớp học sẽ có thể xảy ra bất cứ nơi nào trong một tập tin. –

1

tôi đặt mã của bạn vào một tập tin gọi là test.php và tải php-5.4.10

Khi tôi thực hiện:

php -c php.ini-development -f test.php 

tôi nhìn thấy đầu ra sau đây:

PHP Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

Tôi tin rằng bạn có vấn đề về cấu hình. Bạn đang thử nghiệm từ dòng lệnh?

Edit:

tôi cũng so sánh do_bind_inherited_class trong zend_compile.c cho cả hai phiên bản.

zend_compile.c from 5.3

zend_compile.c from 5.4.10

Dường như họ chỉ thêm hỗ trợ cho các tính trạng.

Câu trả lời của tôi là: Không, tôi không tin rằng thái độ đã thay đổi.

+0

Đây là một bình luận; bên cạnh đó, nó có thể được cô đặc để chỉ đơn giản là http://3v4l.org/XaECZ –

+0

@Jack: Trước khi tôi đăng câu trả lời của mình, tôi đã tìm kiếm trang web đó, cảm ơn bạn! Tôi nghĩ rằng tôi là một câu trả lời, tôi dường như là người đầu tiên thử nghiệm cùng một phiên bản, và cũng là người duy nhất trả lời câu hỏi đặt ra bởi OP. (Không, thái độ không thay đổi) – Martin

+0

Để công bằng, câu trả lời "" cho câu hỏi đã được đưa ra trong [bình luận này] (http://stackoverflow.com/questions/15078219/has-phps-attitude-towards- ngoại lệ-thay đổi-trong-phiên bản-5-4-10/16827225? noredirect = 1 # comment21206563_15078219). Ngoài ra, nó không trả lời * tại sao * điều này xảy ra cho OP chỉ (vì vậy có vẻ như). –

Các vấn đề liên quan