Tất cả trên web [1][2][3], nó nói rằng kể từ PHP 5.0.0 "gán giá trị trả về mới bằng cách tham khảo" cho một E_DEPRECATED
hoặc E_STRICT
tùy thuộc vào phiên bản php của bạn (E_DEPRECATED
không tồn tại cho đến 5.3, do đó, nó là E_STRICT
trước đó).mới bằng cách tham khảo không đưa ra cảnh báo
Như vậy nó là sự hiểu biết của tôi rằng mã này nên đưa ra một cảnh báo như vậy:
error_reporting(E_ALL | E_STRICT);
class A
{
}
$a =& new A();
Tuy nhiên, tôi đã cố gắng này trên hai máy chủ hoàn toàn khác nhau (một chạy PHP 5.3 và một chạy PHP 5.2) và không thực sự đang đưa ra bất kỳ thông điệp nào! Chuyện gì vậy? Sự hiểu biết của tôi không chính xác hoặc là điều gì đó kỳ lạ xảy ra trên hai máy chủ đó?
(Tôi cũng không nghĩ rằng đó là lạ mà này bị phản đối, thấy rằng $a = null; $b =& $a; $b = new A();
không làm tương tự như $a = null; $b =& $a; $b =& new A();
, nhưng đó chỉ là một phần của câu hỏi nếu tôi hiểu sai những gì đang bị phản đối ...)
Kỳ lạ thay, tôi chỉ gặp lỗi này nếu tôi chạy lệnh này trên 'phpsh',' PHP không được chấp nhận: Gán giá trị trả về mới bằng tham chiếu không được chấp nhận trong /Library/Python/2.7/site-packages/phpsh/phpsh.php (578): eval() 'd mã trên dòng 1', nhưng không phải nếu tôi chạy nó trực tiếp từ cli. – Dogbert
@ Dogbert: Điều đó thật kỳ lạ. Tôi đã chỉ thử nó như là phục vụ từ các máy chủ Apache bên ngoài bản thân mình, nhưng khi tôi có thời gian tôi sẽ xem xét chạy nó từ dòng lệnh và 'phpsh' bản thân mình – Jasper
Nó sẽ không gây ngạc nhiên cho tôi nếu vấn đề ở đây nằm ở nơi khác: thử đặt 'E_ALL | E_STRICT' trong php.ini của bạn trực tiếp, đừng quên thay đổi php-cli.ini, nếu bạn đang chạy mã này trên dòng lệnh. Ngoài ra, hãy kiểm tra kỹ xem các lỗi này có bị ẩn hay không bằng cách thực hiện 'ini_set ('display_errors', 1);'. Ngoài ra, nếu bạn đang chạy này trên một cửa sổ hộp, đã có [một số lỗi] (https://bugs.php.net/bug.php?id = 46326) với điều này trong quá khứ –