cari
Rumahpembangunan bahagian belakangtutorial phpPHP OOP Bahagian-Statik harta, kaedah dan ini vs diri

PHP OOP Part-Static property, method and this vs self

Dalam siri ini, saya akan membincangkan asas-asas Pengaturcaraan Berorientasikan Objek PHP (OOP). Kandungan akan disusun mengikut bahagian berurutan, setiap satu memfokuskan pada topik tertentu. Jika anda seorang pemula atau tidak biasa dengan konsep OOP, siri ini direka bentuk untuk membimbing anda langkah demi langkah. Dalam bahagian ini, saya akan membincangkan tentang sifat statik, kaedah dan ini vs diri dalam PHP. Mari kita mulakan perjalanan belajar PHP OOP bersama-sama!

Apakah harta dan kaedah?

Pertama, mari kita cuba memahami sifat dan kaedah. Apabila kita mencipta berbilang objek menggunakan kelas, setiap objek diperuntukkan lokasi memori yang berasingan. Akibatnya, semua sifat dan kaedah objek itu juga diperuntukkan kepada lokasi ingatan khusus tersebut.

Ini bermakna apabila kita menukar mana-mana sifat objek, perubahan itu terhad kepada objek tertentu sahaja. Ia tidak menjejaskan mana-mana objek lain kerana sifat dan kaedah kelas dikaitkan dengan objek masing-masing kelas itu.

Untuk mengakses sifat atau kaedah ini dari luar kelas, kita perlu mencipta objek kelas tersebut. Walau bagaimanapun, jika kita ingin mengakses sifat atau kaedah ini dalam kelas, kita boleh menggunakan kata kunci $this. Kata kunci $this mewakili objek semasa kelas. Kami akan mengetahui lebih lanjut tentang kata kunci $ini kemudian. Mari kita lihat contoh berikut:

Contoh Kod

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();

Dalam contoh ini, kita dapat melihat bahawa untuk mengakses sifat kelas, kita telah menggunakan kata kunci $this dalam kaedah kelas yang sama. Begitu juga, untuk menggunakan mana-mana kaedah kelas ini dari luar, kami telah mencipta objek kelas. Beginilah lazimnya kami menggunakan sifat atau kaedah biasa kelas.

Apakah sifat dan kaedah statik?

Walau bagaimanapun, sifat atau kaedah statik berfungsi secara berbeza. Apabila kita mentakrifkan kelas, ia diperuntukkan lokasi memori sekali sahaja. Begitu juga, apabila kita mentakrifkan sifat atau kaedah statik dalam kelas, ia juga diperuntukkan kepada lokasi memori tertentu di samping kelas itu sendiri, tetapi hanya sekali.

Akibatnya, jika kami mengubah suai mana-mana sifat atau kaedah statik kemudian, perubahan itu akan mencerminkan semua kejadian kelas. Dalam erti kata lain, di mana sahaja sifat atau kaedah statik digunakan, nilai kemas kininya akan tersedia.

Jika kita ingin mengakses sifat atau kaedah statik dari luar kelas, kita boleh menggunakan :: (pengendali resolusi skop) tanpa mencipta objek. Sebagai alternatif, kita juga boleh mengaksesnya selepas mencipta objek. Untuk mengaksesnya dari dalam kelas, kita boleh menggunakan kata kunci diri atau nama kelas itu sendiri. Di sini, kata kunci diri mewakili kelas.

Kami akan meneroka kata kunci diri dengan lebih terperinci kemudian. Mari kita lihat contoh berikut:

Contoh Kod

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();

Dalam contoh ini, kita dapat melihat bahawa untuk mengakses sifat statik kelas, kita telah menggunakan kata kunci diri dalam kaedah kelas yang sama. Selain itu, untuk menggunakan kaedah statik dari luar kelas, kami mencipta objek kelas. Walau bagaimanapun, kami juga boleh mengaksesnya secara terus menggunakan nama kelas bersama-sama dengan :: (pengendali resolusi skop), tanpa membuat objek. Beginilah lazimnya kami menggunakan sifat statik atau kaedah kelas.

Dalam contoh di atas, kita dapat melihat bahawa menggunakan kelas Kereta, kita mencipta dua objek, $toyota dan $bmw, dengan data yang berbeza. Sekarang kita mahu mengakses nilai objek ini. Jika kita menjalankan kod di atas, kita akan melihat output berikut:

Contoh Kod

class Car
{
   public static $name;
   public static $color;

   function __construct($name, $color)
   {
      self::$name = $name;
      self::$color = $color;
   }

   public static function getValue()
   {
      echo "Car name: " . self::$name . "\n";
      echo "Car color: " . self::$color . "\n";
   }
}

$toyota = new Car('Toyota', 'Black');
$bmw = new Car('BMW', 'Orange');

$toyota::getValue();
$bmw::getValue();

Car::getValue();

Kita dapat melihat bahawa kedua-dua objek menunjukkan nilai yang sama. Dalam erti kata lain, nilai yang kami peroleh adalah daripada objek yang paling baru dibuat. Walaupun apabila kami cuba mengakses nilai secara terus melalui kelas, kami masih mendapat nilai yang sama, iaitu, nilai objek kedua.

Alasan untuk ini agak jelas. Seperti yang dinyatakan sebelum ini, sifat atau kaedah statik dicipta dalam satu lokasi memori. Jika sifat atau kaedah statik ditukar dari mana-mana sahaja, perubahan itu mempengaruhi semua kejadian kelas.

Dalam contoh di atas, apabila kita mencipta objek kedua, nilai sifat berubah sebaik sahaja objek itu dicipta. Perubahan ini turut mempengaruhi objek yang dibuat sebelum ini kerana semua objek kelas berkongsi sifat atau kaedah statik yang sama.

Adalah penting untuk diingat bahawa sifat statik atau kaedah kelas tidak boleh digunakan dengan cara yang sama seperti sifat atau kaedah kelas biasa. Anda tidak boleh menggunakan operator → untuk mengaksesnya. Sebaliknya, anda mesti menggunakan ::(operator resolusi skop), sama ada anda mengaksesnya dari dalam atau luar kelas.

Kata kunci $this vs self

Apakah $ini?

Kami telah pun melihat penggunaan kata kunci $this dan self. Sekarang, mari kita mendalami konsep ini untuk lebih memahaminya.

$ini ialah kata kunci PHP terbina dalam. Apabila kita mencipta satu atau lebih objek menggunakan kelas, sifat dan kaedah biasa yang ditakrifkan dalam kelas boleh diakses menggunakan kata kunci $this dari dalam kelas.

Sekarang, kita tahu bahawa apabila kelas ditakrifkan, ia diperuntukkan kepada lokasi memori tertentu sekali sahaja. Ini mungkin menimbulkan persoalan: jika kita mencipta berbilang objek daripada kelas ini, adakah kata kunci $this akan mengakses sifat atau kaedah sekali sahaja untuk semua objek?

Jawapannya ialah "Tidak". Ini kerana, seperti yang telah kita bincangkan, kata kunci $this tidak mewakili kelas itu sendiri sebaliknya objek yang dicipta oleh kelas tersebut. Dalam erti kata lain, $ini berkaitan secara langsung dengan objek. Akibatnya, untuk setiap objek yang dicipta, kata kunci $this akan mengakses sifat dan kaedah kelas secara berasingan untuk setiap objek. Mari kita lihat contoh berikut:

class Car
{
   public $name;
   public $color;

   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function getValue()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

$tesla = new Car('Zip', 'Blue');
$tesla->getValue();

Dalam contoh sebelumnya, kami telah menggunakannya beberapa kali, tetapi penggunaan $this tidak dibincangkan secara terperinci. Sekarang setelah kita mendapat sedikit pemahaman tentang $ini, kita boleh memahami penggunaannya dengan lebih baik. Menggunakan kelas ini, kami telah mencipta objek. Kini, kami faham bahawa kata kunci $this mengakses sifat secara berasingan untuk setiap objek.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kata kunci $this tidak boleh digunakan dalam kaedah statik. Mengapa ia tidak boleh digunakan akan diterangkan sebentar lagi.

Apakah kata kunci diri?

Kita sudah tahu bahawa apabila kelas ditakrifkan, ia diperuntukkan kepada lokasi memori sekali sahaja. Begitu juga, semua sifat statik dan kaedah dalam kelas itu juga diperuntukkan kepada lokasi memori bersama-sama dengan kelas, sekali sahaja.

Akibatnya, apabila kita mencipta objek menggunakan kelas ini, sifat atau kaedah statik tidak dicipta secara berasingan untuk setiap objek. Inilah sebabnya kami tidak boleh mengakses sifat atau kaedah statik ini menggunakan kata kunci $this. Kata kunci $this mewakili objek kelas dan memandangkan sifat atau kaedah statik tidak berkaitan dengan mana-mana objek tetapi terus kepada kelas itu sendiri, kata kunci itu tidak boleh diakses menggunakan $this.

Untuk mengakses sifat atau kaedah statik dalam kelas, kami menggunakan kata kunci kendiri atau nama kelas bersama-sama dengan ::(operator resolusi skop). Ini kerana kata kunci diri mewakili kelas itu sendiri. Mari kita lihat contoh berikut:

class Car
{
   public static $name;
   public static $color;

   function __construct($name, $color)
   {
      self::$name = $name;
      self::$color = $color;
   }

   public static function getValue()
   {
      echo "Car name: " . self::$name . "\n";
      echo "Car color: " . self::$color . "\n";
   }
}

$toyota = new Car('Toyota', 'Black');
$bmw = new Car('BMW', 'Orange');

$toyota::getValue();
$bmw::getValue();

Car::getValue();

Dalam contoh ini, kami melihat bahawa kami boleh mengakses ahli statik dengan mudah dalam kaedah bukan statik menggunakan nama kelas atau kata kunci diri dengan pengendali resolusi ::skop, kerana ia berkaitan dengan kelas. Oleh itu, untuk mengaksesnya, kita tidak perlu mencipta objek yang berasingan.

Walau bagaimanapun, jika kami ingin mengakses ahli bukan statik dalam kaedah statik, kami perlu menggunakan kata kunci $this. Tetapi kita tahu bahawa kata kunci $this tidak boleh digunakan dalam kaedah statik kerana $ini berkaitan dengan objek, manakala ahli bukan statik tidak berkaitan dengan objek. Inilah sebabnya kami tidak boleh menggunakan kata kunci $this dalam kaedah statik.

Walau bagaimanapun, jika kita perlu mengakses ahli bukan statik dalam kaedah statik, kita boleh mencipta contoh atau objek kelas dalam kaedah statik dan kemudian menggunakan kata kunci $this untuk mengaksesnya, seperti yang ditunjukkan dalam contoh di atas .

Saya harap ini memberi anda pemahaman yang lebih jelas tentang penggunaan $this dan kata kunci diri. Itu sahaja untuk hari ini; kita sambung dalam pelajaran seterusnya.

Anda boleh berhubung dengan saya di GitHub dan Linkedin.

Atas ialah kandungan terperinci PHP OOP Bahagian-Statik harta, kaedah dan ini vs diri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Bekerja dengan Data Sesi Flash di LaravelBekerja dengan Data Sesi Flash di LaravelMar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, ReactBina aplikasi React dengan hujung belakang Laravel: Bahagian 2, ReactMar 04, 2025 am 09:33 AM

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Respons HTTP yang dipermudahkan dalam ujian LaravelRespons HTTP yang dipermudahkan dalam ujian LaravelMar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API RESTCurl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API RESTMar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

12 skrip sembang php terbaik di codecanyon12 skrip sembang php terbaik di codecanyonMar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Pemberitahuan di LaravelPemberitahuan di LaravelMar 04, 2025 am 09:22 AM

Dalam artikel ini, kami akan meneroka sistem pemberitahuan dalam rangka kerja web Laravel. Sistem pemberitahuan di Laravel membolehkan anda menghantar pemberitahuan kepada pengguna melalui saluran yang berbeza. Hari ini, kami akan membincangkan bagaimana anda boleh menghantar pemberitahuan ov

Terangkan konsep pengikatan statik lewat dalam PHP.Terangkan konsep pengikatan statik lewat dalam PHP.Mar 21, 2025 pm 01:33 PM

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Pembalakan PHP: Amalan Terbaik untuk Analisis Log PHPPembalakan PHP: Amalan Terbaik untuk Analisis Log PHPMar 10, 2025 pm 02:32 PM

Pembalakan PHP adalah penting untuk memantau dan menyahpepijat aplikasi web, serta menangkap peristiwa kritikal, kesilapan, dan tingkah laku runtime. Ia memberikan pandangan yang berharga dalam prestasi sistem, membantu mengenal pasti isu -isu, dan menyokong penyelesaian masalah yang lebih cepat

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),