php 정적 함수
php의 정적 기능에 대한 질문이 있습니다.
내가 수업이 있다고 가정해 보자.
class test {
public function sayHi() {
echo 'hi';
}
}
내가 하면test::sayHi();
문제없이 동작합니다.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
동작합니다.
일등석과 이등석의 차이점은 무엇입니까?
정적 기능의 특별한 점은 무엇입니까?
첫 번째 수업에서는sayHi()
는 실제로는 스태틱메서드로 호출하고 있는 인스턴스 메서드이며, 그 이유는 다음과 같습니다.sayHi()
에 대해 언급하지 않다$this
.
스태틱 함수는 클래스의 인스턴스가 아니라 클래스에 관련지어집니다.그래서...$this
는 스태틱콘텍스트에서는 사용할 수 없습니다($this
오브젝트를 가리키고 있지 않습니다).
단순히 정적 함수는 해당 함수가 속한 클래스와 독립적으로 기능합니다.
$이것은 이 클래스의 객체임을 의미합니다.정적 기능에는 적용되지 않습니다.
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'Hi'
완전히 다른 점은, 당신은 이 모든 것을$this
정전기능 내부에 공급됩니다.사용하려고 하면$this
, 를 얻을 수 있습니다.Fatal error: Using $this when not in object context
.
좋아, 다른 한 가지 차이점:E_STRICT
경고는 첫 번째 예에서 생성됩니다.
스태틱 이외의 메서드를 호출하면 E_STRICT 레벨의 경고가 스태틱하게 생성됩니다.
간단히 말하면, 두 번째 경우에는 $this와 같은 개체가 없습니다. static 메서드는 객체의 인스턴스가 아닌 클래스의 함수/메서드이기 때문입니다.
예(PHP 5.3.5)를 사용해 본 결과, 어느 경우라도 사용할 수 없는 함수를 정의할 수 있는 것이 판명되었습니다.$this
operator를 사용하여 클래스 함수 작업을 수행합니다.그래서 아직 차이를 찾을 수 없었습니다. : (
언급URL : https://stackoverflow.com/questions/902909/php-static-function
'IT' 카테고리의 다른 글
WordPress 템플릿에서 현재 페이지가 WooCommerce 카트인지 체크아웃 페이지인지 어떻게 알 수 있습니까? (0) | 2023.02.10 |
---|---|
Woocommerce 3에서 프로그래밍 방식으로 주문에 요금 추가 (0) | 2023.02.10 |
실행 중인 스크립트의 상위 디렉토리 가져오기 (0) | 2023.02.06 |
mysql.sock을 찾을 수 없습니다. (0) | 2023.02.06 |
Larabel 5.4 및 Mariadb에서 너무 많은 연결 오류 발생 (0) | 2023.02.06 |