Heim > Backend-Entwicklung > PHP-Tutorial > php面向对象编程self和static的区别_PHP

php面向对象编程self和static的区别_PHP

WBOY
Freigeben: 2016-05-27 10:18:57
Original
763 Leute haben es durchsucht

在php的面向对象编程中,总会遇到

class test{
 public static function test(){
  self::func();

  static::func();
 }

 public static function func(){}
}

Nach dem Login kopieren

可你知道self和static的区别么?

其实区别很简单,只需要写几个demo就能懂:

Demo for self:

class Car
{
 public static function model(){
  self::getModel();
 }

 protected static function getModel(){
  echo "This is a car model";
 }
}

Nach dem Login kopieren

Car::model();

Class Taxi extends Car
{
 protected static function getModel(){
  echo "This is a Taxi model";
 }
}

Nach dem Login kopieren

Taxi::model();
得到输出

This is a car model
This is a car model
Nach dem Login kopieren

可以发现,self在子类中还是会调用父类的方法

Demo for static

class Car
{
 public static function model(){
  static::getModel();
 }

 protected static function getModel(){
  echo "This is a car model";
 }
}

Car::model();

Class Taxi extends Car
{
 protected static function getModel(){
  echo "This is a Taxi model";
 }
}

Taxi::model();

Nach dem Login kopieren

得到输出

This is a car model
This is a Taxi model
Nach dem Login kopieren

可以看到,在调用static,子类哪怕调用的是父类的方法,但是父类方法中调用的方法还会是子类的方法(好绕嘴。。)

在PHP5.3版本以前,static和self还是有一点区别,具体是什么,毕竟都是7版本的天下了。就不去了解了。

总结呢就是:self只能引用当前类中的方法,而static关键字允许函数能够在运行时动态绑定类中的方法。

Verwandte Etiketten:
php
Quelle:php.cn
Vorheriger Artikel:一波PHP中cURL库的常见用法代码示例_PHP Nächster Artikel:PHP实现的多文件上传类及用法示例_PHP
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage