Maison >développement back-end >Problème PHP >Quelle est la différence entre les méthodes statiques et les méthodes ordinaires en php

Quelle est la différence entre les méthodes statiques et les méthodes ordinaires en php

王林
王林original
2020-08-06 15:32:323410parcourir

La différence entre les méthodes statiques et les méthodes ordinaires en PHP est la suivante : les méthodes ordinaires ont besoin d'objets pour être appelées et $this doit être lié, c'est-à-dire que les méthodes ordinaires doivent avoir des objets et ensuite laisser les objets les appeler des méthodes statiques ; n'appartiennent à aucun des deux objets, il n'est donc pas nécessaire de lier $this, c'est-à-dire qu'il peut être appelé sans objet.

Quelle est la différence entre les méthodes statiques et les méthodes ordinaires en php

Les méthodes ordinaires sont stockées dans la classe et n'ont qu'une seule copie ; les méthodes statiques sont également stockées dans la classe et n'ont qu'une seule copie.

(Tutoriel recommandé : Tutoriel graphique php )

La différence est la suivante : les méthodes ordinaires ont besoin d'objets pour appeler et $this doit être lié, c'est-à-dire que les méthodes ordinaires doivent avoir un objet, puis laisser l'objet l'appeler. Les méthodes statiques n'appartiennent à aucun objet, il n'est donc pas nécessaire de lier $this, c'est-à-dire qu'elles peuvent être appelées sans objet.

(Recommandation vidéo d'apprentissage : Introduction à la programmation)

Exemple d'analyse :

<?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();
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn