PHP – 클래스 내에서 상수를 정의합니다.

클래스 내에서 상수를 정의하고 클래스 컨텍스트에서 호출되었을 때만 상수가 표시되도록 하려면 어떻게 해야 합니까?

……와 같은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