이 글은 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.',符合要求'; }else{ return self::$name.',不太行'; } } } echo Classname::$height; //180, 通过类名::访问静态变量 echo Classname::player('xiaoming',180,80,22, 'Male'); //通过类名::访问静态方法;
위의 예에서 $this는 모두 self로 대체했음을 알 수 있습니다. 왜냐하면 $this는 호출 개체를 참조하고 self는 메서드가 있는 클래스 자체를 참조하기 때문입니다. 클래스 이름::을 통해 여기에 개체가 없으면 $this는 비어 있음을 참조하므로 시스템은 오류를 보고합니다. 따라서 정적 메서드에서 변수를 호출할 때는 $this를 사용할 수 없습니다.
self 뒤에 있는 변수에 유의하세요. :: $ 기호가 있어야 합니다.
이 정적을 과소평가하지 마세요. 이를 사용하면 멤버 변수와 메서드의 의미가 근본적으로 바뀌었습니다.
정적 메서드에서는 일반 변수가 아닌 정적 변수만 호출할 수 있습니다. 이는 정적 메서드의 속성에 따라 결정됩니다. 일반 멤버 변수는 "객체"에 바인딩되어 있기 때문입니다. "객체". "클래스" 바인딩.
정적 변수와 일반 변수의 차이점을 자세히 설명하겠습니다:
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, 通过对象名::可以直接访问静态成员变量
위의 예를 통해 다음을 만들 수도 있습니다. 요약:
PHP 비디오 튜토리얼저자 : 소통방의 노인
추천 학습 : "
위 내용은 PHP에서 정적이란 무엇입니까? 정적 속성 및 정적 메서드에 대해 자세히 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!