>  기사  >  백엔드 개발  >  PHP의 정적 메소드와 일반 메소드의 차이점은 무엇입니까

PHP의 정적 메소드와 일반 메소드의 차이점은 무엇입니까

王林
王林원래의
2020-08-06 15:32:323347검색

PHP에서 정적 메서드와 일반 메서드의 차이점은 다음과 같습니다. 일반 메서드에는 호출할 개체가 필요하고 $this는 바인딩되어야 합니다. 즉, 일반 메서드에는 개체가 있어야 하며 개체가 해당 개체를 호출하도록 해야 합니다. $this를 바인딩해야 합니다. 즉, 개체 없이 호출할 수 있습니다.

PHP의 정적 메소드와 일반 메소드의 차이점은 무엇입니까

일반 메서드는 클래스에 저장되고 복사본이 하나만 있습니다. 정적 메서드도 클래스에 저장되며 복사본이 하나만 있습니다.

(추천 튜토리얼: php 그래픽 튜토리얼)

차이점은: 일반 메소드는 호출할 객체가 필요하고 $this는 바인딩되어야 합니다. 즉, 일반 메소드에는 객체가 있어야 하며 객체가 이를 호출하도록 해야 합니다. 정적 메서드는 어떤 객체에도 속하지 않으므로 $this를 바인딩할 필요가 없습니다. 즉, 객체 없이 호출할 수 있습니다.

(학습 영상 추천: 프로그래밍 입문)

예시 분석:

<?php
header(&#39;content-type:text/html;charset=utf-8&#39;);

class Human{
  static public $head=1;
  public function easyeat(){
    echo &#39;普通方法吃饭<br />&#39;;
  }
  static public function eat(){
    echo &#39;静态方法吃饭<br />&#39;;
  }
  public function intro(){
    echo $this->name;
  }
}
Error_reporting(E_ALL|E_STRICT);
//此时没有对象!方法可以执行
Human::eat();
/*
以下方法easyeat是一个非静态方法,就由对象来调用,但,用类来调用此方法来也可以执行,而严格状态下,此方法会执行,同时报错,
Strict Standards: Non-static method Human::easyeat() should not be called statically in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 32

*/
Human::easyeat();
/*
接上,从逻辑来理解,如果用类名静态调用非静态(普通)方法
比如:intro()
那么,这个$this是指哪个对象呢??
因此会报错,因为找不到对象!
Fatal error: Using $this when not in object context in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 23
*/
Human::intro();
/*
如上分析,其实,非静态方法,是不能由类名静态调用的,但目前,php中的面向对象检测不够严格,只要静态方法中没有$this关键字,就会转化成静态方法来处理!
*/
$li=new Human();
$li->eat();
?>

위 내용은 PHP의 정적 메소드와 일반 메소드의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.