>  기사  >  백엔드 개발  >  PHP에서 정적이란 무엇입니까? 정적 속성 및 정적 메서드에 대해 자세히 알아보기

PHP에서 정적이란 무엇입니까? 정적 속성 및 정적 메서드에 대해 자세히 알아보기

青灯夜游
青灯夜游앞으로
2021-07-09 19:25:053565검색

이 글은 PHP의 정적 속성과 정적 메소드를 소개하고, 정적 변수와 일반 변수의 차이점을 소개합니다.

PHP에서 정적이란 무엇입니까? 정적 속성 및 정적 메서드에 대해 자세히 알아보기

정적이란 무엇입니까?

앞서 멤버 변수와 메소드를 호출하려면 객체를 사용해야 한다고 언급했습니다. 하지만 변수와 메소드를 인스턴스화하고 직접 액세스하고 싶지 않다면 어떻게 될까요? 함수를 사용합니다.

변수와 메소드를 정의할 때 앞에 static 키워드를 추가하면 static으로 변환되는데, 이는 클래스명::큰따옴표를 통해 직접 접근할 수 있습니다.

위 예제를 계속해서 static 변수로 다시 작성합니다. 그리고 정적 메서드:

class Classname          //定义一个类, 类名不区分大小写
{
static public $name;      //定义静态成员变量;
static public $height=180;    //初始化赋值
static public $weight, $nationality; //可以一个语句定义多个变量
static protected $age;

static public function player($name,$height, $weight, $age, $sex)
{                    //定义静态成员方法, 以及方法形参
    self::$name=$name;                 //为成员变量赋值, 使用了代词self::
    self::$weight=$weight;
    self::$height=$height;

    if (self::$height<185 && self::$weight<=85){
        return self::$name.&#39;,符合要求&#39;;
    }else{
        return self::$name.&#39;,不太行&#39;;
    }
}
}
echo Classname::$height;              //180, 通过类名::访问静态变量
echo Classname::player(&#39;xiaoming&#39;,180,80,22, &#39;Male&#39;);  //通过类名::访问静态方法;

위의 예에서 $this는 모두 self로 대체했음을 알 수 있습니다. 왜냐하면 $this는 호출 개체를 참조하고 self는 메서드가 있는 클래스 자체를 참조하기 때문입니다. 클래스 이름::을 통해 여기에 개체가 없으면 $this는 비어 있음을 참조하므로 시스템은 오류를 보고합니다. 따라서 정적 메서드에서 변수를 호출할 때는 $this를 사용할 수 없습니다.

self 뒤에 있는 변수에 유의하세요. :: $ 기호가 있어야 합니다.

정적의 본질

이 정적을 과소평가하지 마세요. 이를 사용하면 멤버 변수와 메서드의 의미가 근본적으로 바뀌었습니다.

정적 메서드에서는 일반 변수가 아닌 정적 변수만 호출할 수 있습니다. 이는 정적 메서드의 속성에 따라 결정됩니다. 일반 멤버 변수는 "객체"에 바인딩되어 있기 때문입니다. "객체". "클래스" 바인딩.

정적 변수와 일반 변수의 차이점을 자세히 설명하겠습니다

:

    일반 멤버 변수는 개체에 바인딩됩니다. 개체의 멤버 변수에는 고유한 할당된 값이 있습니다. 비록 동일할 수 있지만
  • 정적 변수는 클래스에 바인딩됩니다. 그러면 이 클래스의 모든 개체 중에서 this 값이 변경됩니다.
  • 정적 변수는 object::를 통해서도 액세스할 수 있지만 실제로는 동일한 클래스의 개체가 동일한 정적 변수 값에 액세스한다는 것은 전체가 공유하는 것으로 이해할 수 있습니다. 클래스를 포함합니다.
  • 객체 중 하나가 파괴되더라도 정적 변수 값은 그대로 유지됩니다.
  • 하위 클래스는 상위 클래스의 정적 멤버 변수를 재정의할 수도 있지만 정적 변수는 예, 이 두 정적 멤버 변수는 호출 클래스 이름에 따라 별도로 액세스됩니다.
  • 예를 들어 보겠습니다.
class Shouji
{
    static public $test;           //定义一个静态变量
    static function test5()        //定义静态方法来操作并输出静态变量
    {
        self::$test++;
        echo self::$test;
    }
}
class Shouji2 extends  Shouji          //定义一个子类
{
    static function test5()           //定义子类的静态方法
    {
        self::$test++;                 //访问并操作父类的静态变量
        echo self::$test;
    }
}
$shouji1=new Shouji;               //新建父类对象
$shouji1->test5();     //1, 通过对象调用静态方法
$shouji2=new Shouji;   //新建另一个父类对象
$shouji2->test5();    //2,  在前一次操作基础上继续+1
$shouji3=new Shouji2;    //新建子类对象
$shouji3->test5();    //3, 调用子类同名静态方法, 继续+1
echo Shouji::$test;    //3, 通过父类::直接访问静态成员变量
echo $shouji1::$test;   //3, 通过对象名::可以直接访问静态成员变量

위의 예를 통해 다음을 만들 수도 있습니다. 요약:

    하위 클래스는 상위 클래스의 정적 메서드를 재정의할 수 있습니다.
  • 메서드 내의 정적 변수에 액세스하려면 :: 기호를 사용해야 합니다.
  • 정적 메서드는 사용할 수 없습니다. 그리고 정적 변수는 하위 클래스에 의해 상속됩니다.
  • 정적 변수는 ->로 접근할 수 없지만 ::(이중 콜론)으로 접근할 수 있습니다.
  • 객체는 객체 이름 ->을 통해 정적 멤버 메서드를 직접 호출할 수 있습니다. , 이는 일반적인 메소드를 호출하는 것과 같습니다.
이 글의 출처는 https://juejin.cn/post/6977200691919978510

저자 : 소통방의 노인

추천 학습 : "
PHP 비디오 튜토리얼

"

위 내용은 PHP에서 정적이란 무엇입니까? 정적 속성 및 정적 메서드에 대해 자세히 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제