PHP 魔术方法 __clone __toString(五),__clone__tostring
PHP 魔术方法 __clone __toString(五),__clone__tostring
__clone() - 当对象克隆的时候自动加载此方法
__toString() - 当对象需要echo打印输出的时候自动加载此方法
__clone()
<?php class example{ public static $pa; public $pb; public function __construct(){ $this->pb = ++self::$pa; } public function __clone(){ $this->pb = 'no zuo no die'; } } $a = new example; $b = new example; $c = clone $b; $b->pb = 'I Love You So Much!'; echo $a->pb; echo '<hr/>'; echo $b->pb; echo '<hr/>'; echo $c->pb; echo '<hr/>'; echo $b->pb; ?>
结果如下
<span>1</span> ------------------------------------------------------------------------------------<span> I Love You So Much! </span>------------------------------------------------------------------------------------<span> no zuo no die /*要不是有__clone()这个魔术方法,这边的结果应该是2*/ </span>------------------------------------------------------------------------------------<span> I Love You So Much!</span>
php手册给了我们一个例子有些难以看懂,如下
<?php class SubObject { static $instances = 0; public $instance; public function __construct() { $this->instance = ++self::$instances; } public function __clone() { $this->instance = ++self::$instances; } } class MyCloneable { public $object1; public $object2; function __clone() { // 强制复制一份this->object, 否则仍然指向同一个对象 $this->object1 = clone $this->object1; } } $obj = new MyCloneable(); $obj->object1 = new SubObject(); $obj->object2 = new SubObject(); $obj2 = clone $obj; print("Original Object:\n"); print_r($obj); print("Cloned Object:\n"); print_r($obj2); ?>
最后的结果
Original <span>Object</span><span>: MyCloneable </span><span>Object</span><span> ( [object1] </span>=> SubObject <span>Object</span><span> ( [instance] </span>=> <span>1</span><span> ) [object2] </span>=> SubObject <span>Object</span><span> ( [instance] </span>=> <span>2</span><span> ) ) Cloned </span><span>Object</span><span>: MyCloneable </span><span>Object</span><span> ( [object1] </span>=> SubObject <span>Object</span><span> ( [instance] </span>=> <span>3 <span>/*可能这里比较难以理解,其实就是$obj2当克隆的时候将最后的instance为2的结果克隆,并且再执行SubObject::__clone方法*/</span></span><span> ) [object2] </span>=> SubObject <span>Object</span><span> ( [instance] </span>=> <span>2</span><span> ) )</span>
__toString()
<?php // Declare a simple class class TestClass { public $foo; public function __construct($foo) { $this->foo = $foo; } public function __toString() { return $this->foo; } } $class = new TestClass('Hello'); echo $class; ?>
结果
Hello

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perbezaan antara php5 dan php8 adalah dari segi prestasi, struktur bahasa, sistem jenis, pengendalian ralat, pengaturcaraan tak segerak, fungsi perpustakaan standard dan keselamatan. Pengenalan terperinci: 1. Peningkatan prestasi Berbanding dengan PHP5, PHP8 mempunyai peningkatan besar dalam prestasi PHP8 memperkenalkan pengkompil JIT, yang boleh menyusun dan mengoptimumkan beberapa kod pelaksanaan frekuensi tinggi, dengan itu meningkatkan kelajuan berjalan; PHP8 memperkenalkan beberapa struktur dan fungsi bahasa baharu PHP8 menyokong parameter yang dinamakan, membenarkan pembangun menghantar nama parameter dan bukannya susunan parameter, dsb.

Cara menukar port 80 dalam php5: 1. Edit nombor port dalam fail konfigurasi pelayan Apache; mula berjalan pada port baru berjalan pada port.

Langkah penyelesaian untuk php5 tidak mendengar port 9000: 1. Semak fail konfigurasi PHP-FPM 2. Mulakan semula perkhidmatan PHP-FPM 3. Matikan tembok api atau konfigurasikan pemajuan port 4. Semak sama ada proses lain menduduki port 9000;

Perbezaan sintaks antara php7 dan php5 ialah: 1. PHP7 memperkenalkan pengisytiharan jenis yang ketat, manakala jenis pembolehubah PHP5 adalah tersirat 2. PHP7 memperkenalkan sokongan untuk pengisytiharan jenis skalar, tetapi PHP5 tidak memperkenalkan operator NULL Merge; PHP5 menyemak sama ada pembolehubah wujud dan tidak batal, anda perlu menggunakan pernyataan bersyarat 4. PHP7 menambah operator perbandingan baharu "<=>", tetapi PHP5 tidak 5. PHP7 memperkenalkan kelas tanpa nama yang baharu, manakala PHP5 tidak.

Jika anda seorang pentadbir laman web, anda mungkin menghadapi situasi di mana anda perlu menukar port PHP5 daripada port lalai 80. Proses ini mungkin sedikit tergesa-gesa, tetapi selagi anda mengikuti langkah-langkah di bawah, ia akan mudah diselesaikan.

Perbezaan antara versi php7 dan 5 termasuk peningkatan prestasi, pengisytiharan jenis skalar, pengisytiharan jenis nilai pulangan, penambahbaikan pengendalian pengecualian, kelas tanpa nama, penambahbaikan sintaks, pengendali baharu, pengendalian ralat yang dipertingkatkan dan penyingkiran beberapa ciri lama. Pengenalan terperinci: 1. Peningkatan prestasi PHP7 memperkenalkan enjin Zend baharu, bernama Zend Engine 3.0, yang membawa peningkatan prestasi yang ketara , pengumpulan sampah dipertingkatkan, dsb.

Apabila menggunakan PHP5, sesetengah pengguna mungkin menghadapi situasi yang port 9000 tidak boleh didengari. Pada masa ini, kami perlu melakukan beberapa kerja konfigurasi dan penyelesaian masalah untuk menyelesaikan masalah ini.

PHP ialah bahasa pengaturcaraan bahagian pelayan yang digunakan secara meluas untuk membangunkan laman web dan aplikasi dinamik. Dalam beberapa tahun kebelakangan ini, keluaran PHP7 telah menarik perhatian. PHP7 mempunyai banyak penambahbaikan dan pengoptimuman berbanding versi sebelumnya (seperti PHP5). Dalam artikel ini, kami akan meneroka perbezaan sintaks antara PHP7 dan PHP5.
