回答
class MyClass
{
const MYCONSTANT = 'constant value';
function showConstant() {
echo self::MYCONSTANT. "\n";
}
}
echo MyClass::MYCONSTANT. "\n";
$classname = "MyClass";
echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0
在這種情況下呼應本身MYCONSTANT
將提高的通知關於一個未定義常量並輸出常量名稱轉換爲字符串:"MYCONSTANT"
。
編輯 - 你要找也許什麼是這個static properties/variables:
class MyClass
{
private static $staticVariable = null;
public static function showStaticVariable($value = null)
{
if ((is_null(self::$staticVariable) === true) && (isset($value) === true))
{
self::$staticVariable = $value;
}
return self::$staticVariable;
}
}
MyClass::showStaticVariable(); // null
MyClass::showStaticVariable('constant value'); // "constant value"
MyClass::showStaticVariable('other constant value?'); // "constant value"
MyClass::showStaticVariable(); // "constant value"
,但它不工作來定義它的類的函數內部:( – Alex 2011-05-05 03:17:41
@Alex :不,它不會(AFAIK,可能有一些模糊的方式) – 2011-05-05 03:18:48
@Alex:檢查我的編輯 – 2011-05-05 03:24:49
class Foo {
const BAR = 'baz';
}
echo Foo::BAR;
這是爲了類常量的唯一途徑。這些常量通過Foo::BAR
可以全局訪問,但不能通過BAR
訪問。
爲了實現像Foo::baz()->BAR
語法,你需要從Foo
類的功能baz()
具有財產BAR
返回一個對象。儘管如此,這還不是一個常數。您定義的任何常量始終可以從任何地方全局訪問,並且不能限制爲函數調用結果。
這是一個很老的問題,但也許這個答案仍然可以幫助別人。
您可以模仿通過將最後關鍵字來返回一個預先定義的值,這樣的方法的類範圍內受到限制的公共常數:上的方法防止
class Foo {
// This is a private constant
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
最終關鍵字重新定義該方法的擴展類。 您還可以將final關鍵字放在類聲明的前面,在這種情況下,關鍵字會阻止類繼承。
要獲得近正是亞歷克斯一直在尋找下面的代碼可用於:
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
class Foo {
static public app()
{
return new Constants();
}
}
的模擬定值會是這樣訪問:
Foo::app()->MYCONSTANT();
這是老問題,但現在在PHP 7.1上,您可以定義持續的可見性。
例
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR.PHP_EOL;
echo Foo::BAZ.PHP_EOL;
?>
輸出在PHP 7上面的例子中的。1:
bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
注: 作爲PHP 7.1.0可見性修飾符的允許類常量。
更多信息here
您可以定義一個類在PHP不變。但是你的類常量也可以從任何對象實例訪問。這是php的功能。 但是,從php7.1,您可以用訪問修飾符(public
,private
或protected
)定義您的類常量。
解決方法是將常量定義爲private
或protected
,然後通過static function
使其可讀。如果從靜態上下文中調用該函數,該函數應該只返回常量值。
您也可以在您的父類中創建此靜態函數,並簡單地繼承此類父類以使其成爲默認功能。
學分:http://dwellupper.io/post/48/defining-class-constants-in-php
- 1. 在另一個類常量中定義類常量php
- 2. PHP:在類之外或構造函數中定義常量?
- 3. 定義類在PHP
- 4. 如何在類中使用常量作爲php函數中的參數定義?
- 5. 在函數內定義一個PHP類常量
- 6. PHP 5.4.9未定義的類常量'MYSQL_ATTR_INIT_COMMAND'
- 7. PHP中的抽象常量 - 強制子類定義常量
- 8. PHP常量定義
- 9. 在PHP中重新定義常量
- 10. 未定義類常量METH_GET
- 11. 定義PHP類
- 12. NoMethodError在Ruby中::自定義異常類
- 13. 在模板類中定義的常量
- 14. PHP定義類中的函數
- 15. 未定義類常量「MYSQL_ATTR_INIT_COMMAND」
- 16. PHP:類中定義的'use'
- 17. PHP Codesniffer自定義規則:常數::類,而不是字符串
- 18. 如何PHP使用常數(定義)
- 19. 在php中定義數組鍵值php
- 20. 在PHP類中定義條件變量
- 21. 定義自定義異常的基類
- 22. 常量數組定義在PHP 7.0.0中轉換爲字符串
- 23. 在外牆定義類常量
- 24. PHP未定義常量PHP_ROUND_HALF_DOWN
- 25. 在PHP中定義多個函數參數類型
- 26. 棘輪PHP致命錯誤:未定義的類常量'MYSQL_ATTR_INIT_COMMAND'在
- 27. 如何在類構造函數中定義常量?
- 28. 在java中的自定義異常的超類構造函數
- 29. 未定義的常量在PHP
- 30. 在C中定義函數常量
我有這個問題最近http://stackoverflow.com/q/5710676/560299 – Ibu 2011-05-05 03:22:20