Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbezaan antara diri dan statik dalam kemahiran programming_php berorientasikan objek php

Perbezaan antara diri dan statik dalam kemahiran programming_php berorientasikan objek php

WBOY
WBOYasal
2016-05-16 09:00:142721semak imbas

Dalam pengaturcaraan berorientasikan objek PHP, anda akan sentiasa menghadapi

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

  static::func();
 }

 public static function func(){}
}

Tetapi adakah anda tahu perbezaan antara diri dan statik?

Malah, perbezaannya sangat mudah Anda hanya perlu menulis beberapa demo untuk memahami:

Demo untuk diri sendiri:

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

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

Kereta::model();

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

Teksi::model();
Dapatkan output

This is a car model
This is a car model

Anda boleh mendapati bahawa diri masih akan memanggil kaedah kelas induk dalam subkelas

Demo untuk statik

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

Dapatkan output

This is a car model
This is a Taxi model

Anda boleh melihat bahawa apabila memanggil statik, walaupun subkelas memanggil kaedah kelas induk, kaedah yang dipanggil dalam kaedah kelas induk akan tetap menjadi kaedah subkelas (sangat mengelirukan...)

Sebelum versi PHP5.3, masih terdapat sedikit perbezaan antara statik dan diri Apa sebenarnya, semuanya dikuasai oleh versi 7. Saya tidak akan memahaminya lagi.

Ringkasannya ialah: diri hanya boleh merujuk kepada kaedah dalam kelas semasa dan kata kunci statik membenarkan fungsi untuk mengikat kaedah secara dinamik dalam kelas semasa masa jalan.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn