IT

PHP 5: 지속 vs 정적

itgroup 2023. 1. 15. 17:03
반응형

PHP 5: 지속 vs 정적

에서는 PHP 5를 사용하는 것과 가 있습니까?const ★★★★★★★★★★★★★★★★★」static

각각언 ?제 ?? ???? and and and 、 and and 、 。public,protected ★★★★★★★★★★★★★★★★★」private아 - 아, 맞다?

클래스의 컨텍스트에서 정적 변수는 클래스 범위(개체가 아님)에 있지만, 상수와는 달리 값을 변경할 수 있습니다.

class ClassName {
    static $my_var = 10;  /* defaults to public unless otherwise specified */
    const MY_CONST = 5;
}
echo ClassName::$my_var;   // returns 10
echo ClassName::MY_CONST;  // returns 5
ClassName::$my_var = 20;   // now equals 20
ClassName::MY_CONST = 20;  // error! won't work.

public, protected, private는 const(항상 퍼블릭)라는 점에서 관계가 없습니다.이것들은 스태틱 변수를 포함한 클래스 변수에만 도움이 됩니다.

  • 퍼블릭 스태틱 변수에는 ClassName을 통해 어디서나 액세스할 수 있습니다.:$syslog.
  • 보호된 정적 변수는 ClassName을 통해 정의 클래스 또는 확장 클래스를 통해 액세스할 수 있습니다.:$syslog.
  • 프라이빗 스태틱 변수에는 ClassName 경유로 정의되는 클래스만 액세스할 수 있습니다.:$syslog.

편집: PHP 7.1.0에서는 클래스 상수의 가시성을 지정하는 지원이 도입되었습니다.

마지막으로 해야 할 점은 항상 정적이고 공개적이라는 것입니다.즉, 다음과 같이 클래스 내에서 const에 액세스할 수 있습니다.

class MyClass
{
     const MYCONST = true;
     public function test()
     {
          echo self::MYCONST;
     }
}

클래스 밖에서 다음과 같이 액세스합니다.

echo MyClass::MYCONST;

상수는 상수일 뿐입니다. 즉, 선언 후에는 값을 변경할 수 없습니다.

정적 변수는 클래스의 인스턴스를 만들지 않고도 액세스할 수 있으므로 클래스의 모든 인스턴스에서 공유됩니다.

또한 함수에는 (함수의 첫 번째 실행 시)1회만 선언되어 함수 호출 간에 값을 저장할 수 있는 스태틱로컬 변수가 존재할 수 있습니다.예를 들어 다음과 같습니다.

function foo()
{
   static $numOfCalls = 0;
   $numOfCalls++;
   print("this function has been executed " . $numOfCalls . " times");
}

때은 상수와 변수를 다른 로 구분하는 방법입니다.self ★★★★★★★★★★★★★★★★★」static 어떤 것에 을 보여 줍니다.

class Person
{
    static $type = 'person';

    const TYPE = 'person';

    static public function getType(){
        var_dump(self::TYPE);
        var_dump(static::TYPE);

        var_dump(self::$type);
        var_dump(static::$type);
    }
}

class Pirate extends Person
{
    static $type = 'pirate';

    const TYPE = 'pirate';
}

그리고 다음 작업을 수행합니다.

$pirate = new Pirate();
$pirate::getType();

또는 다음과 같이 입력합니다.

Pirate::getType();

출력:

string(6) "person" 
string(6) "pirate" 
string(6) "person" 
string(6) "pirate"

말하면, 「 」입니다.self::이 경우는, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」를 참조해 주세요.Person에 비해 superclass)에 대응static::는 실행 시 이 이 "는 "속성과 상수에 액세스합니다").Pirate★★★★★★★★★★★★★★★★★★)

최신 스태틱바인딩에 대한 자세한 내용은 php.net를 참조하십시오.
그리고 여기와 여기 또 다른 질문의 정답을 확인해 보세요.

클래스 메서드 또는 속성을 static으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다.

클래스 상수는 일반 상수와 같기 때문에 실행 시 변경할 수 없습니다.이것이 당신이 const를 사용하는 유일한 이유이기도 합니다.

private, public 및 protected는 누가 어떤 파라미터/메서드에 액세스할 수 있는지를 나타내는 액세스 한정자입니다.

Public은 다른 모든 객체가 액세스됨을 의미합니다.Private는 인스턴스화된 클래스만 액세스할 수 있음을 의미합니다.보호됨은 인스턴스화된 클래스 및 파생된 클래스에 액세스할 수 있음을 의미합니다.

정적 멤버, 상수 변수 및 액세스 수식어(프라이빗, 퍼블릭 및 프로텍트)에 대해 지금까지 배웠습니다.상수

정의.

이름처럼 상수 변수의 값은 변경할 수 없습니다.상수는 $ 기호를 사용하여 선언하거나 사용하지 않는다는 점에서 일반 변수와 다릅니다.

값은 상수 표현식이어야 합니다.변수, 속성, 수학 연산의 결과, 함수 호출 등이 아닙니다.

참고: 변수 값은 키워드(예: self, parent, static)가 될 수 없습니다.

php에서 상수 선언

<?php
class constantExample{

   const CONSTANT = 'constant value'; //constant

 }
?>

Constant의 범위는 글로벌하며 self 키워드를 사용하여 액세스할 수 있습니다.

<?php
class MyClass
{
    const CONSTANT = 'constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
    }
}

echo MyClass::CONSTANT . "\n";

$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0

$class = new MyClass();
$class->showConstant();

echo $class::CONSTANT."\n"; // As of PHP 5.3.0

?>

스태틱

정의.

static 키워드는 클래스, 멤버 함수 또는 변수를 선언하기 위해 사용할 수 있습니다.글로벌 클래스의 스태틱멤버에는 self 키워드를 사용하여 접근할 수도 있습니다.클래스 속성 또는 메서드를 스태틱으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다.static으로 선언된 속성은 인스턴스화된 클래스 개체로 액세스할 수 없습니다(단, 정적 메서드는 액세스할 수 있음).가시성 선언(public, private, protected)이 사용되지 않으면 속성 또는 메서드는 public으로 선언된 것으로 간주됩니다.정적 메서드는 생성된 객체의 인스턴스 없이 호출할 수 있기 때문입니다.

주의: 의사 변수 $this는 static으로 선언된 메서드 내부에서는 사용할 수 없습니다.화살표 연산자 ->를 사용하여 객체를 통해 정적 속성에 액세스할 수 없습니다.

PHP 5.3.0에서는 변수를 사용하여 클래스를 참조할 수 있습니다.> 변수 값은 키워드(self, parent, static 등)가 될 수 없습니다.

스태틱 속성 예시

<?php
class Foo
{
    public static $my_static = 'foo'; //static variable 

    public static function staticValue() { //static function example
        return self::$my_static;  //return the static variable declared globally
    }
}

?>

정적 속성 및 함수 액세스 예제

 <?php
     print Foo::$my_static . "\n";

    $foo = new Foo();
    print $foo->staticValue() . "\n";
    print $foo->my_static . "\n";      // Undefined "Property" my_static 

    print $foo::$my_static . "\n";
    $classname = 'Foo';
    print $classname::$my_static . "\n"; // As of PHP 5.3.0

    print Bar::$my_static . "\n";
    $bar = new Bar();
    print $bar->fooStatic() . "\n";

 ?>

퍼블릭, 프라이빗, 프로텍트(A.K.)액세스 수식자)

다음의 정의를 읽기 전에, 이 「Encapsulation」(캡슐화)에 관한 문서를 참조해 주세요.개념을 좀 더 깊게 이해하는 데 도움이 될 것이다.

링크 1 위키백과

캡슐화에 대한 튜토리얼 포인트 링크

정의.

private, public 및 protected 키워드를 사용하여 클래스 내 멤버에 대한 접근을 제어할 수 있습니다.공개로 선언된 클래스 구성원은 어디에서나 액세스할 수 있습니다.보호되었다고 선언된 구성원은 클래스 자체 내에서만 액세스할 수 있으며 상속된 클래스와 상위 클래스에서만 액세스할 수 있습니다.비공개로 선언된 멤버는 멤버를 정의하는 클래스에서만 액세스할 수 있습니다.

 <?php 
class Example{
 public $variable = 'value'; // variable declared as public 
 protected $variable = 'value' //variable declared as protected
 private $variable = 'value'  //variable declared as private

 public function functionName() {  //public function
 //statements
 }

 protected function functionName() {  //protected function
 //statements
 }
  private function functionName() {  //private function
   //statements
   }

} 
 ?> 

공용, 개인 및 보호된 구성원에 대한 액세스 예제

공용 변수는 클래스 외부 또는 클래스 내부에서 액세스 및 수정할 수 있습니다.그러나 개인 및 보호 변수와 함수는 클래스 내부에서만 액세스할 수 있습니다. 클래스 외부에서 보호됨 또는 공용 구성원의 값은 수정할 수 없습니다.

  <?php 
  class Example{
    public $pbVariable = 'value'; 
    protected $protVariable = 'value'; 
    private $privVariable = 'value';
    public function publicFun(){

     echo $this->$pbVariable;  //public variable 
     echo $this->$protVariable;  //protected variable
     echo $this->privVariable; //private variable
    }

   private function PrivateFun(){

 //some statements
  }
  protected function ProtectedFun(){

 //some statements
  }

  }


 $inst = new Example();
 $inst->pbVariable = 'AnotherVariable'; //public variable modifed from outside
 echo $inst->pbVariable;   //print the value of the public variable

 $inst->protVariable = 'var'; //you can't do this with protected variable
 echo $inst->privVariable; // This statement won't work , because variable is limited to private

 $inst->publicFun(); // this will print the values inside the function, Because the function is declared as a public function

 $inst->PrivateFun();   //this one won't work (private)
 $inst->ProtectedFun();  //this one won't work as well (protected)

  ?>

자세한 내용은 Visibility Php Doc에 대한 이 php 문서를 참조하십시오.

참고 자료 : php.net

컨셉을 이해하셨으면 좋겠습니다.읽어주셔서 감사합니다:) :) 좋은 하루 보내세요.

@Matt의 훌륭한 답변을 요약하면 다음과 같습니다.

  • 필요한 속성을 변경하지 않으면 상수가 적절한 선택입니다.

  • 필요한 속성을 변경할 수 있는 경우 대신 static을 사용합니다.

예:

class User{
    private static $PASSWORD_SALT = "ASD!@~#asd1";
    ...
}

class Product{
    const INTEREST = 0.10;
    ...
}

편집: PHP 7.1.0에서는 클래스 상수의 가시성을 지정하는 지원이 도입되었습니다.

언급URL : https://stackoverflow.com/questions/1685922/php-5-const-vs-static

반응형