PHP 정적 함수
PHP의 정적 기능에 관한 질문이 있습니다.
내가 수업이 있다고 가정합시다
class test {
public function sayHi() {
echo 'hi';
}
}
내가 test::sayHi();
하면 문제없이 작동합니다.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
잘 작동합니다.
1 등석과 2 등석의 차이점은 무엇입니까?
정적 함수의 특별한 점은 무엇입니까?
첫 번째 클래스에서 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와 같은 객체가 없습니다. 정적 메서드는 객체 인스턴스가 아닌 클래스의 함수 / 메서드이기 때문입니다.
예제 (PHP 5.3.5)를 시도한 후 함수를 정의하는 두 경우 모두 $this
연산자를 사용 하여 클래스 함수에서 작업 할 수 없다는 것을 발견했습니다 . 그래서 아직 차이점을 찾을 수 없었습니다. :(
참고 URL : https://stackoverflow.com/questions/902909/php-static-function
'program story' 카테고리의 다른 글
JDBC에서 연결 풀을 설정하는 방법은 무엇입니까? (0) | 2020.08.13 |
---|---|
MongoDB 원 자성 "findOrCreate": findOne, 존재하지 않는 경우 삽입하지만 업데이트하지 않음 (0) | 2020.08.13 |
공동 디자인 오류 : 인증서 ID가 두 번 표시됨 (0) | 2020.08.13 |
기대 최대화 기법에 대한 직관적 인 설명은 무엇입니까? (0) | 2020.08.13 |
Visual Studio 직접 실행 창을 다시 열려면 어떻게하나요? (0) | 2020.08.13 |