Bạn có thể xác định hoặc thay đổi một hằng số trong PHP không?Bạn có thể xác định hoặc thay đổi một hằng số trong PHP không?
Trả lời
No. Hằng số là constant.
tham khảo: php.net/manual/language.constants.php
vì vậy PHP khuyến khích sử dụng các biến toàn cầu để đạt được điều này? – TheConstantGardener
@TheConstantGardener: Không nhất thiết. Có vài trường hợp thiết kế tốt đòi hỏi một biến toàn cục. –
thì tại sao Wordpress sử dụng từ khóa toàn cục trong 66 tệp cho 851 lần? – TheConstantGardener
số Khi một hằng số được định nghĩa, nó không bao giờ có thể thay đổi hoặc không xác định.
Điều này không đúng. Phần mở rộng runkit (như đã đề cập trong câu trả lời khác) đã cho phép nó từ PHP 4. Gần đây, phần mở rộng uopz cũng cho phép nó từ PHP 5.4. –
Nếu bạn hoàn toàn cần thực hiện việc này (mặc dù tôi không khuyên bạn nên như những người khác đã nêu), bạn luôn có thể sử dụng Runkit.
http://www.php.net/manual/en/function.runkit-constant-redefine.php
http://www.php.net/manual/en/function.runkit-constant-remove.php
Vô lý như thế này là một trong những lý do có quá nhiều mã PHP ở ngoài đó. Phá hoại các cấu trúc ngôn ngữ theo cách như vậy là một ý tưởng khủng khiếp và phản ánh kém về nhà phát triển. –
Runkit là một phần mở rộng PHP tùy chọn, mà tôi chưa bao giờ thấy được cài đặt trên bất kỳ máy chủ web nào. – gnud
@George Cummins Tôi đồng ý với bạn ở đó! Tuy nhiên, OP đã không đề cập đến những gì họ đang làm hoặc tại sao họ muốn bỏ/xác định lại các hằng số, và những thứ khác có thể là sau Runkit cho một số công cụ hack ngôn ngữ rất thử nghiệm, vì vậy tôi nghĩ tôi sẽ đăng nó. –
Các áp phích khác là chính xác - bạn không thể làm điều này. Nhưng có lẽ bạn có thể di chuyển định nghĩa của bạn đến điểm mà bạn biết giá trị tốt nhất cho hằng số là bao nhiêu.
Có lẽ bạn đang xác định các hằng số trong một danh sách lớn:
define('STRING1','Foo');
define('STRING2', 'Bar');
define('STRING3', 'Baz');
và bạn muốn thay đổi giá trị của STRING2 khi bạn phát hiện ra một điều kiện. Một cách sẽ là trì hoãn định nghĩa cho đến khi bạn biết cài đặt chính xác.
define('STRING1','Foo');
// define('STRING2', 'Bar'); -- wait until initialization
define('STRING3', 'Baz');
...
if (condition) {
define('STRING2', 'Bar type 2');
} else {
define('STRING2', 'Bar type 1');
}
Cài đặt logic STRING2 thậm chí có thể ở tệp khác, sau này trong quá trình xử lý của bạn.
Tôi biết đây là muộn để các trò chơi ... nhưng đây là một điều mà có thể giúp một số người ...
Trong tôi tập tin "Application.php" (nơi tôi xác định tất cả các hằng số của tôi và đưa vào tất cả các kịch bản của tôi) tôi làm điều gì đó như thế này:
if(!defined("LOGGER_ENABLED")){
define("LOGGER_ENABLED", true);
}
Vì vậy, thông thường, mỗi kịch bản sẽ được khai thác gỗ kích hoạt ... nhưng nếu trong ONE kịch bản đặc biệt tôi không muốn hành vi này tôi chỉ đơn giản có thể làm điều này TRƯỚC Tôi bao gồm Application.php của mình:
define("LOGGER_ENABLED", false);
Nếu không nhìn thấy toàn bộ ứng dụng của bạn, đây có thể là một giả định không công bằng, nhưng "ghi đè" hệ thống của riêng bạn có vẻ hơi khó hiểu. Bạn không thể thiết kế lại ứng dụng/khung công tác của mình để quản lý tốt hơn nếu Logger nên được bật hay không dựa trên một cái gì đó cụ thể hơn hoặc hợp lý hơn? Vì nó là, điều này nghe rất khó sử dụng và quản lý, và trên đầu trang cho một cái gì đó mà âm thanh như được sử dụng không thường xuyên. Đó là câu trả lời hợp lệ bổ sung thêm thông tin hữu ích cho câu hỏi, do đó không giảm bớt, nhưng nó có khả năng thúc đẩy thực hành xấu. – James
@patrick, vâng, nhưng nếu ai đó muốn thay đổi giá trị đã được đặt, thì tôi nghĩ câu trả lời của Nils Luxton phù hợp nhất với nó. Hy vọng bạn nhớ tôi. –
Điều này sẽ được chấp nhận câu trả lời vì nó cung cấp một giải pháp hoạt động. Nó cũng là thực tế thông thường trong ví dụ. C mã hóa, vì vậy tôi không thấy nó một vấn đề được sử dụng trong PHP – Sinisa
Như không được đề cập ở nơi khác, phần mở rộng uopz cho phép một hằng số được xóa qua uopz_undefine(), với PHP 5.4+.
Down cử tri: Nếu những gì tôi đã viết là sai, XIN VUI LÒNG SO hoặc chính xác! –
- 1. Xác định hằng số lớp trong PHP
- 2. Xác định lại các hằng số trong PHP
- 3. Lỗi xác định hằng số trong Delphi
- 4. Tại sao tôi có thể thay đổi các hằng số?
- 5. Làm thế nào để thay đổi hằng số PHP?
- 6. Lỗi PHP - Hằng số DB_HOST đã được xác định?
- 7. Tại sao 'được xác định() || xác định 'cú pháp trong việc xác định một hằng số
- 8. Có thể định nghĩa các hằng số trong css không?
- 9. Bạn có thể sử dụng hằng số tĩnh trong PHP không?
- 10. Chuyển đổi một chuỗi để một hằng số được định nghĩa trong PHP
- 11. Bạn có thể tăng hằng số biên dịch không?
- 12. hằng số php có thể được tham chiếu nhưng được xác định() trả về false
- 13. Tôi có muốn các hằng số xác định không?
- 14. Có thể xác định xem số SIM/Điện thoại có thay đổi không?
- 15. Hằng số động trong PHP?
- 16. Xác định TRACE Hằng số trong .NET/Visual Studio
- 17. Bạn có thể chỉ định số cột trong read.table không?
- 18. PHP: có thể đặt hằng số trong tệp php.ini mặc định
- 19. Làm thế nào để xác định một hằng số là một byte hoặc ngắn?
- 20. Xác định hằng số ứng dụng trong Codeigniter
- 21. Có một hằng số cho GB lớn trong Cocoa không?
- 22. Xác định các hằng số quá tải trong Isabelle
- 23. Tự động tải hằng số trong PHP?
- 24. Lỗi OSX Homebrew: hằng số không xác định MACOS
- 25. Lưu ý: Sử dụng hằng số không xác định ENT_HTML5 - giả định 'ENT_HTML5'
- 26. cách sử dụng hằng số từ lớp như một định nghĩa đối số trong hàm php?
- 27. Có hằng số xác định giá trị cực đại của số nguyên dài hay không?
- 28. Bạn có thể xác định toán tử (***) trong F # không?
- 29. Làm thế nào để bạn chèn một hằng số PHP vào một truy vấn SQL?
- 30. Làm thế nào bạn có thể xác định lại một định danh liên tục trong DrScheme?
Nói cách khác, bạn muốn hằng số là biến? Có thể muốn suy nghĩ về điều này trong một thời gian dài hơn. –
@MarcB nhưng thích hợp, được cung cấp tên người dùng của OP. – abligh
@MarcB OP rõ ràng đã thừa nhận sự trớ trêu của câu hỏi (anh/cô ấy đã tạo một tài khoản chỉ để đăng câu hỏi này), nhưng dù sao thì nó cũng đặt ra một cách nghiêm túc. Nghe có vẻ hợp lý hơn như _ "Bạn có thể định nghĩa một trong những điều mà người sáng tạo của PHP đã quyết định gọi là 'hằng số' không?" _ –