클래스 내에서 상수를 정의하고 클래스 컨텍스트에서 호출되었을 때만 상수가 표시되도록 하려면 어떻게 해야 합니까?
……와 같은Foo::app()->MYCONSTANT;
(또, 다음과 같이 불릴 경우)MYCONSTANT
무시당하다)
질문에 대한 답변
클래스 상수 참조:
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"
.
EDIT – 다음과 같은 정적 속성/변수가 필요할 수 있습니다.
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"
이것은 오래된 질문이지만, 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 치명적인 오류:캡처되지 않은 오류: 개인 Const Foo에 액세스할 수 없습니다.~의 BAZ
참고: PHP 7.1.0부터는 클래스 상수에 대해 가시성 수정자가 허용됩니다.
자세한 내용은 이쪽
class Foo {
const BAR = 'baz'; }
echo Foo::BAR;
이것이 클래스 상수를 만드는 유일한 방법입니다.이러한 상수는 항상 글로벌하게 액세스 할 수 있습니다.Foo::BAR
단, 이러한 접근은BAR
.
다음과 같은 구문을 얻으려면Foo::baz()->BAR
함수에서 개체를 반환해야 합니다.baz()
계급의Foo
성질이 있는 BAR
그건 상수가 아니에요.정의한 상수는 항상 어디에서나 글로벌하게 접근할 수 있으며 함수 호출 결과로 제한할 수 없습니다.
이것은 꽤 오래된 질문이지만, 아마도 이 답변은 다른 사람에게도 도움이 될 수 있을 것이다.
다음과 같이 정의된 값을 반환하는 메서드에 final 키워드를 적용하면 클래스 범위 내에서 제한된 퍼블릭 상수를 에뮬레이트할 수 있습니다.
class Foo {
// This is a private constant
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
} }
메서드의 final 키워드는 확장 클래스가 메서드를 다시 정의할 수 없도록 합니다.클래스 선언 앞에 최종 키워드를 배치할 수도 있습니다.이 경우 키워드에 의해 클래스 상속이 차단됩니다.
Alex가 찾고 있던 것을 거의 정확하게 취득하려면 , 다음의 코드를 사용합니다.
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
} }
class Foo {
static public app()
{
return new Constants();
} }
에뮬레이트된 상수 값은 다음과 같이 액세스할 수 있습니다.
Foo::app()->MYCONSTANT();
클래스 상수는 php로 정의할 수 있습니다.그러나 클래스 상수는 모든 객체인스턴스에서도 액세스할 수 있습니다.이것이 php의 기능입니다.단, php7.1부터는 클래스 상수를 액세스 수식자로 정의할 수 있습니다.public
,private
또는protected
).
회피책은 상수를 다음과 같이 정의하는 것입니다.private
또는protected
를 통해 읽을 수 있도록 합니다.static function
이 함수는 정적 컨텍스트에서 호출된 경우에만 상수 값을 반환합니다.
또한 부모 클래스에서 이 정적 함수를 만들고 다른 모든 클래스에서 이 부모 클래스를 상속하여 기본 기능으로 만들 수도 있습니다.
크레딧 : http://dwellupper.io/post/48/defining-class-constants-in-php