static은 static객체또는 정적 변수를 정의하는 것입니다. 이 글에서 관련 예제를 읽어보면 static으로 정의된 변수나 클래스 메서드의 특성을 알 수 있습니다.
1. 객체$object = new Class()를 만든 다음 변수/메서드에 액세스할 수 있는 경우 "->"를 사용하여 $object->attribute/function을 호출합니다.
2. 정적이든 비정적이든 클래스 메서드/변수: class::attribute/function을 직접 호출합니다. 하지만 전제 조건이 있습니다:
A. 변수인 경우 해당 변수에 액세스할 수 있어야 합니다.
B. 메서드인 경우 액세스 가능한 메서드 외에도 다음을 충족해야 합니다.
b1) 정적 메서드인 경우 특별한 조건이 없습니다.
b2) 비정적 메서드인 경우 , 메소드에서 $this 를 사용하지 않도록 변경해야 합니다. 즉, 비정적 변수/메서드 호출이 없으며, 물론 정적 변수/메서드 호출에는 문제가 없습니다.
그럼 $object->...를 사용하는 것과 class::...를 사용하는 것의 차이점을 살펴보겠습니다.
1. $object->...를 사용할 때 객체를 생성하려면 constructor를 실행해야 합니다.
2. 클래스 ::...를 사용하여 생성자를 실행하지 않고 정적 메서드/변수를 호출하여 개체를 생성합니다.
3. 클래스::...를 사용하여 생성자를 실행하지 않고 비정적 메서드/변수를 호출하여 개체를 만듭니다.
그러면 이상한 점이 나옵니다. 2와 3이 동일하므로 정적 메소드/변수가 존재하는 이유는 무엇입니까?
static static
클래스 멤버나 메서드를 static으로 선언하면 클래스를 인스턴스화하지 않고 직접 액세스할 수 있습니다. 정적 멤버(정적 메서드 제외)는 개체를 통해 액세스할 수 없습니다. 정적 멤버는 클래스에 속하며 어떤 객체 인스턴스에도 속하지 않지만 클래스의 객체 인스턴스는 공유될 수 있습니다.
코드는 다음과 같습니다.
class Child{ public $name; //这里定义并初始化一个静态变量 $nums public static $nums=0; function construct($name){ $this->name=$name; } public function join_game(){ //self::$nums 使用静态变量 self::$nums+=1; echo $this->name."加入堆雪人游戏"; } } //创建三个小孩 $child1=new Child("李逵"); $child1->join_game(); $child2=new Child("张飞"); $child2->join_game(); $child3=new Child("唐僧"); $child3->join_game(); //看看有多少人玩游戏 echo "<br/> 有这".Child::$nums;
위 내용은 PHP에서 정적 변수의 기본 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!