(二)PHP面向对象理论2
一. 魔术方法:
1. 魔术方法以“__”开头,是PHP的语法糖。语法糖是更实用的编码方式或技巧,使代码更易读。
2. __set与__get
<?php class Account{ private $user = 1 ; private $pwd = 2; public function __set($name,$value){ echo "Setting $name to $value \r\n"; $this ->$name = $value; } public function __get($name){ if (!isset($this->$name)){ echo 'no set '; $this->$name = 'set default value:'; } return $this->$name; } } $a = new Account(); echo $a -> user; echo "<br><br>"; $a->user = 5; echo $a->$name; echo "<br><br>"; echo $a->big;
2.__call和__callStatic:
(以下代码,未能执行成功)
<?php /* * 本代码没有执行成功 */ abstract class ActiveRecord{ protected static $table; protected $fieldValues; public $select; static function findById($id){ $query = "select * from " .static::$table ." where id = $id"; echo $query; return self::createDomain($query); } function __get($fieldname){ return $this->fieldvalues[$fieldname]; } static function __callStatic($method,$args){ $field = preg_replace('/^findBy(\w*)$','${1}',$method); $query = "select * from " .static::$table ." where $field='$args[0]"; return self::createDomain($query); } private static function createDomain($query){ echo "test"; $klass = get_called_class(); $domain = new $klass(); $domain->fieldvalues = array(); $domain->select = $query; foreach($klass::$fields as $field => $type){ $domain->fieldvalues[$field] = 'TODO:set from sql result'; } return $domain; } } class Customer extends ActiveRecord{ protected static $table = 'custdb'; protected static $fields = array( 'id' => 'int', 'email' => 'varchar', 'lastname' => 'varchar' ); public function __construct(){ echo "***"; } } class Sales extends ActiveRecord{ protected static $table = 'salesdb'; protected static $fields = array( 'id' => 'int', 'item' => 'varchar', 'qty' => 'int' ); } assert("select * from custdb where id = 123" == Customer::findById(123) ->select); assert("TODO: set from sql result" == Customer::findById(123)->email); assert("select * from salesdb where id = 321"== Sales::findById(321)->select); assert("select * from custdb where lastname = 'Denoncourt'"== Customer::findByLastname('Denoncourt')->select);
3.__toString
<?php header("Content-type: text/html; charset=utf-8"); class Account{ public $user = 1 ; private $pwd = 2 ; public function __toString(){ return "当前对象的用户是{$this->user},密码是{$this->pwd}"; } } $a = new Account(); echo $a; echo "<br><br>"; echo PHP_EOL."==="; echo "<br><br><br>"; print_r($a);
二.继承与多态:
1. 继承:类与类之间有一种父与子的关系,子类继承父类的属性和方法,称为继承。
在继承里,子类拥有父类的方法和属性,同时子类也可以有自己的方法和属性。
<?php header("Content-type: text/html; charset=utf-8"); class person{ public $name = 'Tom'; public $gender; static $money = 10000; public function __construct(){ echo "这里是父类",PHP_EOL; } public function say(){ echo $this->name,"\tis",$this->gender,"\r\n"; } } class family extends person{ public $name; public $gender; public $age; static $money = 100000; public function __construct(){ parent::__construct(); echo "这里是子类",PHP_EOL; } public function say(){ echo "<br>我说".$this->name,"\tis\t",$this->gender,",and is \t", $this->age,PHP_EOL."<br>"; } public function cry(){ echo parent::$money,PHP_EOL; echo "%>-<br><br>read again".parent::say()."<br>"; } } $poor = new family(); $poor->name = 'Lee'; $poor->gender = 'female'; $poor->age = 25; $poor->say(); $poor->cry(); $poor->read(); /* * 疑问: * 我在子类上加了个方法叫read * 结果执行结果成了: * 这里是父类 这里是子类 我说Lee is female,and is 25 10000 %>-<br>在继承中,以parent指代父类,以self指代自身。以”::”(范围解析操作符)调用父类的方法。”::”操作符还用来作为类常量和静态方法的调用。<br>如果声明类成员或方法为static,就可以不实例化类而直接访问。<br>不能通过一个对象访问其中的静态成员(静态方法除外),也不能用“::”访问一个非静态方法。<br>继承是一种“是、像”的关系,而组合一种“需要”的关系。<br>从方法复用的角度考虑,如果两个类具有很多相同的代码和方法,可以从这两个类中抽象出一个父类,提供公共方法,然后两个类作为子类。提供个性方法。<br>继承的问题:<br>a. 继承破坏封装性。<br>b. 继承是紧耦合的。<br>c. 继承扩展复杂。<br>d. 不恰当地使用继承可能违反现实世界中的逻辑。<br><pre name="code"><?php class car{ public function addoil(){ echo "Add oil\r\n"; } } class bmw extends car{ } class benz{ public $car; public function __construct(){ $this->car = new car; } public function addoil(){ $this->car->addoil(); } } $bmw = new bmw(); $bmw ->addoil(); $benz = new benz(); $benz->addoil();
a. 继承树的抽象层一般不要多于三层。
b. 对于不是专门用于被继承的类使用final修饰符,可以防止重要方法被覆写。
c. 优先考虑组合关系可以提高代码的可重用性。
d. 子类是一种特殊的类型,不只是父类的一个角色。
e. 底层代码多用组合以提高效率,顶层(业务层)代码多用继承以提高灵活性。
2. 多态:
实际开发中,只要关心一个接口或基类的编程,而不必关心一个对象所属于的具体类。
<?php header("Content-type: text/html; charset=utf-8"); class employee{ protected function working(){ echo "本方法需要重载才能运行"; } } class teacher extends employee{ public function working(){ echo "教书"; } } class coder extends employee{ public function working(){ echo "敲代码"; } } class readBooks extends employee{ public function working(){ echo "我不看书的!"; } } function doprint($obj){ if(get_class($obj) == 'employee'){ echo "error"; }else{ $obj->working(); } } doprint(new teacher()); doprint(new coder()); doprint(new employee()); doprint(new readBooks());
总结:
a. 多态指同一类对象在运行时的具体化
b. PHP语言是弱类型的,实现多态更简单、更灵活
c. 类型转换不是多态
d. PHP中父类和子类被看作是‘继父’和‘继子’的关系,存在继承关系。子类无法向上转型为父类。
e. 多态的本质就是if...else,但实现的层级不同。
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了(二)PHP面向对象理论2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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



Mesej "Organisasi anda memerlukan anda menukar PIN anda" akan muncul pada skrin log masuk. Ini berlaku apabila had tamat tempoh PIN dicapai pada komputer menggunakan tetapan akaun berasaskan organisasi, di mana mereka mempunyai kawalan ke atas peranti peribadi. Walau bagaimanapun, jika anda menyediakan Windows menggunakan akaun peribadi, sebaiknya mesej ralat tidak akan muncul. Walaupun ini tidak selalu berlaku. Kebanyakan pengguna yang mengalami ralat melaporkan menggunakan akaun peribadi mereka. Mengapa organisasi saya meminta saya menukar PIN saya pada Windows 11? Ada kemungkinan akaun anda dikaitkan dengan organisasi dan pendekatan utama anda adalah untuk mengesahkan perkara ini. Menghubungi pentadbir domain anda boleh membantu! Selain itu, tetapan dasar tempatan yang salah konfigurasi atau kunci pendaftaran yang salah boleh menyebabkan ralat. Sekarang ni

Windows 11 membawa reka bentuk yang segar dan elegan ke hadapan antara muka moden membolehkan anda memperibadikan dan menukar butiran terbaik, seperti sempadan tingkap. Dalam panduan ini, kami akan membincangkan arahan langkah demi langkah untuk membantu anda mencipta persekitaran yang mencerminkan gaya anda dalam sistem pengendalian Windows. Bagaimana untuk menukar tetapan sempadan tetingkap? Tekan + untuk membuka apl Tetapan. WindowsSaya pergi ke Pemperibadian dan klik Tetapan Warna. Perubahan Warna Tetingkap Sempadan Tetapan Tetingkap 11" Lebar="643" Tinggi="500" > Cari pilihan Tunjukkan warna aksen pada bar tajuk dan sempadan tetingkap, dan togol suis di sebelahnya. Untuk memaparkan warna aksen pada menu Mula dan bar tugas Untuk memaparkan warna tema pada menu Mula dan bar tugas, hidupkan Tunjukkan tema pada menu Mula dan bar tugas

Secara lalai, warna bar tajuk pada Windows 11 bergantung pada tema gelap/terang yang anda pilih. Walau bagaimanapun, anda boleh menukarnya kepada mana-mana warna yang anda mahu. Dalam panduan ini, kami akan membincangkan arahan langkah demi langkah untuk tiga cara mengubahnya dan memperibadikan pengalaman desktop anda untuk menjadikannya menarik secara visual. Adakah mungkin untuk menukar warna bar tajuk tetingkap aktif dan tidak aktif? Ya, anda boleh menukar warna bar tajuk tetingkap aktif menggunakan apl Tetapan, atau anda boleh menukar warna bar tajuk tetingkap tidak aktif menggunakan Registry Editor. Untuk mempelajari langkah-langkah ini, pergi ke bahagian seterusnya. Bagaimana untuk menukar warna bar tajuk dalam Windows 11? 1. Tekan + untuk membuka tetingkap tetapan menggunakan apl Tetapan. WindowsSaya pergi ke "Peribadikan" dan kemudian

Adakah anda melihat "Masalah berlaku" bersama-sama dengan pernyataan "OOBELANGUAGE" pada halaman Pemasang Windows? Pemasangan Windows kadangkala terhenti kerana ralat tersebut. OOBE bermaksud pengalaman di luar kotak. Seperti yang ditunjukkan oleh mesej ralat, ini ialah isu yang berkaitan dengan pemilihan bahasa OOBE. Tiada apa yang perlu dibimbangkan, anda boleh menyelesaikan masalah ini dengan penyuntingan pendaftaran yang bagus dari skrin OOBE itu sendiri. Pembetulan Pantas – 1. Klik butang “Cuba Semula” di bahagian bawah apl OOBE. Ini akan meneruskan proses tanpa gangguan lagi. 2. Gunakan butang kuasa untuk menutup paksa sistem. Selepas sistem dimulakan semula, OOBE harus diteruskan. 3. Putuskan sambungan sistem daripada Internet. Lengkapkan semua aspek OOBE dalam mod luar talian

Lakaran kecil bar tugas boleh menjadi menyeronokkan, tetapi ia juga boleh mengganggu atau menjengkelkan. Memandangkan kekerapan anda menuding di atas kawasan ini, anda mungkin telah menutup tetingkap penting secara tidak sengaja beberapa kali. Kelemahan lain ialah ia menggunakan lebih banyak sumber sistem, jadi jika anda telah mencari cara untuk menjadi lebih cekap sumber, kami akan menunjukkan kepada anda cara untuk melumpuhkannya. Walau bagaimanapun, jika spesifikasi perkakasan anda boleh mengendalikannya dan anda menyukai pratonton, anda boleh mendayakannya. Bagaimana untuk mendayakan pratonton lakaran kecil bar tugas dalam Windows 11? 1. Menggunakan apl Tetapan ketik kekunci dan klik Tetapan. Windows klik Sistem dan pilih Perihal. Klik Tetapan sistem lanjutan. Navigasi ke tab Lanjutan dan pilih Tetapan di bawah Prestasi. Pilih "Kesan Visual"

Ramai pengguna akan memilih jenama Huawei apabila memilih jam tangan pintar Antaranya, Huawei GT3pro dan GT4 adalah pilihan yang sangat popular. Apakah perbezaan antara Huawei GT3pro dan GT4? 1. Rupa GT4: 46mm dan 41mm, bahan cermin kaca + badan keluli tahan karat + cangkang belakang gentian resolusi tinggi. GT3pro: 46.6mm dan 42.9mm, bahannya ialah kaca nilam + badan titanium/badan seramik + cangkerang belakang seramik 2. GT4 yang sihat: Menggunakan algoritma Huawei Truseen5.5+ terkini, hasilnya akan lebih tepat. GT3pro: Penambahan elektrokardiogram ECG dan saluran darah serta keselamatan

Kita semua mempunyai pilihan yang berbeza apabila ia berkaitan dengan penskalaan paparan pada Windows 11. Sesetengah orang suka ikon besar, ada yang suka ikon kecil. Walau bagaimanapun, kita semua bersetuju bahawa mempunyai penskalaan yang betul adalah penting. Penskalaan fon yang lemah atau penskalaan berlebihan imej boleh menjadi pembunuh produktiviti sebenar apabila bekerja, jadi anda perlu tahu cara menyesuaikannya untuk memanfaatkan sepenuhnya keupayaan sistem anda. Kelebihan Zum Tersuai: Ini adalah ciri yang berguna untuk orang yang mengalami kesukaran membaca teks pada skrin. Ia membantu anda melihat lebih banyak pada skrin pada satu masa. Anda boleh membuat profil sambungan tersuai yang digunakan hanya pada monitor dan aplikasi tertentu. Boleh membantu meningkatkan prestasi perkakasan kelas rendah. Ia memberi anda lebih kawalan ke atas perkara yang terdapat pada skrin anda. Cara menggunakan Windows 11

Kecerahan skrin adalah bahagian penting dalam menggunakan peranti pengkomputeran moden, terutamanya apabila anda melihat skrin untuk jangka masa yang lama. Ia membantu anda mengurangkan ketegangan mata, meningkatkan kebolehbacaan dan melihat kandungan dengan mudah dan cekap. Walau bagaimanapun, bergantung pada tetapan anda, kadangkala sukar untuk mengurus kecerahan, terutamanya pada Windows 11 dengan perubahan UI baharu. Jika anda menghadapi masalah melaraskan kecerahan, berikut ialah semua cara untuk mengurus kecerahan pada Windows 11. Cara Menukar Kecerahan pada Windows 11 [10 Cara Diterangkan] Pengguna monitor tunggal boleh menggunakan kaedah berikut untuk melaraskan kecerahan pada Windows 11. Ini termasuk sistem desktop menggunakan monitor tunggal serta komputer riba. Jom mulakan. Kaedah 1: Gunakan Pusat Tindakan Pusat Tindakan boleh diakses
