이 글은 주로 PHP에서 self static의 차이점을 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 에디터 따라가서 구경가자
최근에 소프트웨어 공학과목 디자인을 하다가 라라벨 소스코드를 파헤치러 가서 다시 찾아보니 문제가 있었습니다. self static에 대한 깊은 이해가 있어서 문제가 생겼으니, 같은 실수를 반복하지 않도록 적어두세요.
이것은 현재 개체를 가리키며 현재 개체의 비정적 변수 및 비정적 메서드에 액세스하는 데 사용됩니다.
<?php class Person { public $name; public function getName() { echo $this->name; } } $p = new Person(); $p2 = new Person(); $p->name = "小红"; $p2->name = "小明"; $p->getName(); // 小红 $p2->getName(); // 小明
위의 예에서 두 객체는 new. 이며 각각 객체의 name 속성을 설정합니다. 이는 getName()에서 현재 객체의 name 속성에 액세스하는 데 사용되므로 name 값이 각각 출력됩니다. 따라서 이는 현재 개체를 가리키며 다른 개체나 클래스를 가리키지 않습니다.
self는 클래스 자체를 가리키며 인스턴스화된 개체를 가리키지 않습니다. 일반적으로 클래스의 정적 변수 및 정적 메서드에 액세스하는 데 사용됩니다. 두 객체가 추가되고 수정됩니다. 한 객체의 name 속성과 다른 객체의 name 속성 값도 변경되었습니다. 따라서 self는 현재 클래스를 가리키며 모든 객체는 동일한 값을 공유합니다.
static
이라고 합니다. 입니다. 나중에 정적 바인딩 요약 static은 현재 클래스의 정적 변수 및 정적 메서드에 액세스하는 데 일반적으로 사용되는 클래스를 가리키지만 위 내용은 PHP에서 이 자체 정적 사용의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!<?php
class Person {
public static $name = "小红";
public static function getName() {
echo self::$name;
}
}
$p = new Person();
$p2 = new Person();
$p::getName(); // 小红
$p2::getName(); // 小红
$p::$name = "小明";
$p::getName(); // 小明
$p2::getName(); // 小明
이것은 현재 개체의 비정적 변수 및 비정적 메서드에 액세스하는 데 사용되는 현재 개체를 가리킵니다.
self는 일반적으로 정적 변수 및 정적 메서드에 액세스하는 데 사용되는 클래스를 가리킵니다.
정적 호출에만 국한되지는 않습니다. 런타임 시 어떤 클래스를 가리키는지 결정합니다.