2011-06-23 34 views
36

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?

+41

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. –

+4

@MarcB nhưng thích hợp, được cung cấp tên người dùng của OP. – abligh

+0

@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?" _ –

Trả lời

45

No. Hằng số là constant.

tham khảo: php.net/manual/language.constants.php

+0

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

+4

@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. –

+2

thì tại sao Wordpress sử dụng từ khóa toàn cục trong 66 tệp cho 851 lần? – TheConstantGardener

10

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.

+1

Đ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. –

14

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

+22

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. –

+2

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

+10

@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ó. –

4

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.

18

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); 
+0

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

+0

@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. –

+2

Đ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

4

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+.

+1

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! –

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