Rumah pembangunan bahagian belakang tutorial php 速战速决 4 - PHP: 类基础, 抽象类, 接口, trait

速战速决 4 - PHP: 类基础, 抽象类, 接口, trait

Jul 29, 2016 am 08:51 AM
echo gt return

[源码下载]

速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait


作者:webabcd
介绍
速战速决 之 PHP

  • 类基础
  • 抽象类
  • 接口
  • trait


示例
1、类的相关知识点 1(基础)
class/class1.php

<span>php
</span><span>/*</span><span>*
 * 类的相关知识点 1(基础)
 *
 * 规范:命名空间与目录路径对应,类名与文件名对应,文件以 .class.php 为后缀名
 </span><span>*/</span><span>class</span><span> MyClass1
{
    </span><span>//</span><span> 类常量,没有“$”符号,不能被覆盖</span><span>const</span> MyConstant = 'constant value'<span>;
    </span><span>//</span><span> 静态属性</span><span>static</span><span>$myStaticProperty</span> = "static property"<span>;

    </span><span>//</span><span> 对于属性和方法的访问控制有 private protected public(默认值)</span><span>private</span><span>$_name</span><span>;
    </span><span>private</span><span>$_age</span><span>;

    </span><span>//</span><span> 构造函数
    // PHP 中的魔术方法(magic method)均以 __(两个下划线)开头(类似的还有 __destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等)</span><span>function</span><span> __construct()
    {
        </span><span>echo</span> "MyClass1 construct"<span>;
        </span><span>echo</span> "<br>"<span>;

        </span><span>//</span><span> 获取参数个数</span><span>$args_num</span> = <span>func_num_args</span><span>();

        </span><span>if</span> (<span>$args_num</span> == 1<span>)
        {
            </span><span>//</span><span> $this 代表当前对象,是指向类实例的指针</span><span>$this</span>->_name = <span>func_get_arg</span>(0<span>);
        }
        </span><span>else</span><span>if</span> (<span>$args_num</span> == 2<span>)
        {
            </span><span>$this</span>->_name = <span>func_get_arg</span>(0<span>);
            </span><span>$this</span>->_age = <span>func_get_arg</span>(1<span>);
        }
        </span><span>else</span><span>        {

        }
    }

    </span><span>//</span><span> 析构函数</span><span>function</span><span> __destruct()
    {
        </span><span>print</span> "MyClass1 destruct"<span>;
        </span><span>echo</span> "<br>"<span>;
    }

    </span><span>//</span><span> 构造函数,此种方式在 PHP 5.3.3 或以上可支持
    // 此种方式的构造函数也可以当做方法被调用</span><span>public</span><span>function</span><span> MyClass1()
    {
        </span><span>echo</span> "i am not a construct, i am a method"<span>;
    }

    </span><span>//</span><span> 静态方法</span><span>public</span><span>static</span><span>function</span><span> myStaticMethod()
    {
        </span><span>return</span> "static method"<span>;
    }

    </span><span>//</span><span> 方法</span><span>public</span><span>function</span><span> getInfo()
    {
        </span><span>//</span><span> $this 代表当前对象,是指向类实例的指针</span><span>return</span> "name: " . <span>$this</span>->_name . ", age: " . <span>$this</span>-><span>_age;
    }

    </span><span>//</span><span> 不直接支持方法的重载(overload),可以通过相关的魔术方法来实现(参见:class3.php)
    // public function getInfo($name) { }

    // 带参数类型约束的方法,类型约束不能用于 int 或 string 之类的标量类型
    // 本例约束了参数 $ary 必须是 array 类型</span><span>public</span><span>function</span> getFirst(<span>array</span><span>$ary</span><span>)
    {
        </span><span>return</span><span>$ary</span>[0<span>];
    }
}

</span><span>//</span><span> 被声明为 final 的类或属性或方法,无法继承
// 只能继承一个类</span><span>final</span><span>class</span> MyClass2 <span>extends</span><span> MyClass1
{
    </span><span>//</span><span> 构造函数可以为参数设置默认值(方法或函数也可以为参数设置默认值)</span><span>function</span> __construct(<span>$name</span> = "wanglei", <span>$age</span> = 100<span>)
    {
        </span><span>echo</span> "MyClass2 construct"<span>;
        </span><span>echo</span> "<br>"<span>;

        </span><span>//</span><span> parent 代表当前类的基类</span>        parent::__construct(<span>$name</span>, <span>$age</span><span>);

        </span><span>//</span><span> self 代表当前类
        // $this 代表当前对象,是指向类实例的指针</span><span>    }

    </span><span>//</span><span> 析构函数</span><span>function</span><span> __destruct()
    {
        </span><span>print</span> "MyClass2 destruct"<span>;
        </span><span>echo</span> "<br>"<span>;

        parent</span>::<span>__destruct();
    }

    </span><span>//</span><span> 覆盖基类的同名方法(override)</span><span>public</span><span>function</span><span> getInfo()
    {
        </span><span>//</span><span> $this 代表当前对象,指向类实例的指针</span><span>return</span> "MyClass2 - " . parent::<span>getInfo();
    }
}

</span><span>//</span><span> 类的实例化</span><span>$objClass1</span> = <span>new</span> MyClass1("webabcd", 35<span>);
</span><span>//</span><span> 通过 -> 调用实例方法或实例属性</span><span>echo</span><span>$objClass1</span>-><span>getInfo();
</span><span>echo</span> "<br>"<span>;
</span><span>//</span><span> 通过 -> 调用实例方法或实例属性(MyClass1() 是构造函数,也可以当做方法被调用)</span><span>echo</span><span>$objClass1</span>-><span>MyClass1();
</span><span>echo</span> "<br>"<span>;

</span><span>$objClass2</span> = <span>new</span><span> MyClass2();
</span><span>echo</span><span>$objClass2</span>-><span>getInfo();
</span><span>echo</span> "<br>"<span>;

</span><span>//</span><span> instanceof - 用于判断一个对象是否是指定类的实例</span><span>if</span>(<span>$objClass2</span><span> instanceof MyClass1)
{
    </span><span>echo</span> '$objClass2 instanceof MyClass1'<span>;
    </span><span>echo</span> "<br>"<span>;
}

</span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span> MyClass1::<span>MyConstant;
</span><span>echo</span> "<br>"<span>;

</span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span> MyClass1::<span>$myStaticProperty</span><span>;
</span><span>echo</span> "<br>"<span>;

</span><span>//</span><span> variable class(可变类),将变量的值作为类名</span><span>$className</span> = 'MyClass1'<span>;
</span><span>//</span><span> variable method(可变方法),将变量的值作为方法名</span><span>$methodName</span> = 'myStaticMethod'<span>;
</span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span><span>$className</span>::<span>$methodName</span><span>();
</span><span>echo</span> "<br>"<span>;

</span><span>//</span><span> 调用带参数类型约束的方法</span><span>echo</span><span>$objClass1</span>->getFirst(<span>array</span>("a", "b", "c"<span>));
</span><span>echo</span> "<br>";
Salin selepas log masuk


2、类的相关知识点 2(抽象类,接口,trait)
class/class2.php

<span>php
</span><span>/*</span><span>*
 * 类的相关知识点 2(抽象类,接口,trait)
 </span><span>*/</span><span>//</span><span> 抽象类</span><span>abstract</span><span>class</span><span> MyAbstractClass
{
    </span><span>//</span><span> 抽象方法,子类必须定义这些方法</span><span>abstract</span><span>protected</span><span>function</span><span> getValue1();
    </span><span>abstract</span><span>public</span><span>function</span> getValue2(<span>$param1</span><span>);

    </span><span>//</span><span> 普通方法(非抽象方法)</span><span>public</span><span>function</span><span> getValue0()
    {
        </span><span>return</span> "getValue0"<span>;
    }
}

</span><span>//</span><span> 接口</span><span>interface</span><span> MyInterface1
{
    </span><span>//</span><span> 接口常量,不能被覆盖</span><span>const</span> MyConstant = 'constant value'<span>;
    </span><span>public</span><span>function</span><span> getValue3();
}

</span><span>//</span><span> 接口</span><span>interface</span> MyInterface2 <span>extends</span><span> MyInterface1
{
    </span><span>public</span><span>function</span><span> getValue4();
}

</span><span>//</span><span> 接口</span><span>interface</span><span> MyInterface3
{
    </span><span>public</span><span>function</span><span> getValue5();
}

</span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait1
{
    </span><span>//</span><span> 可以具有方法,静态方法,属性等</span><span>function</span><span> getValue6()
    {
        </span><span>return</span> "getValue6"<span>;
    }
}

</span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait2
{
    </span><span>//</span><span> 抽象方法(use 这个 trait 的类必须要定义这个方法)</span><span>abstract</span><span>function</span><span> getValue7();
}

</span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait3
{
    </span><span>function</span><span> getValue6()
    {
        </span><span>return</span> "getValue6"<span>;
    }

    </span><span>function</span><span> getValue8()
    {
        </span><span>return</span> "getValue8"<span>;
    }
}

</span><span>//</span><span> 必须实现所有抽象方法和接口方法
// 类只能单继承,接口可以多继承</span><span>class</span> MyClass1 <span>extends</span> MyAbstractClass <span>implements</span> MyInterface2,<span> MyInterface3
{
    </span><span>//</span><span> 可以 use 多个 trait</span><span>use</span> MyTrait1,<span> MyTrait2;
    </span><span>use</span><span> MyTrait3
    {
        </span><span>//</span><span> 多 trait 间有重名的,可以指定以哪个为准</span>        MyTrait1::<span>getValue6 insteadof MyTrait3;
        </span><span>//</span><span> 可以为 trait 的指定方法设置别名(调用的时候用方法名也行,用别名也行)</span>        MyTrait3::getValue8 <span>as</span><span> alias;
    }

    </span><span>//</span><span> 可以将 protected 升级为 public</span><span>public</span><span>function</span><span> getValue1()
    {
        </span><span>return</span> "getValue1"<span>;
    }

    </span><span>//</span><span> 可以加参数,但是加的参数必须要有默认值</span><span>public</span><span>function</span> getValue2(<span>$param1</span>, <span>$param2</span> = 'param2'<span>)
    {
        </span><span>return</span> "getValue2, {<span>$param1</span>}, {<span>$param2</span>}"<span>;
    }

    </span><span>public</span><span>function</span><span> getValue3()
    {
        </span><span>return</span> "getValue3"<span>;
    }

    </span><span>public</span><span>function</span><span> getValue4()
    {
        </span><span>return</span> "getValue4"<span>;
    }

    </span><span>public</span><span>function</span><span> getValue5()
    {
        </span><span>return</span> "getValue5"<span>;
    }

    </span><span>public</span><span>function</span><span> getValue7()
    {
        </span><span>return</span> "getValue7"<span>;
    }
}

</span><span>//</span><span> 调用接口常量</span><span>echo</span> MyInterface1::<span>MyConstant;
</span><span>echo</span> "<br>"<span>;

</span><span>$myClass1</span> = <span>new</span><span> MyClass1;
</span><span>echo</span><span>$myClass1</span>-><span>getValue0();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue1();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>->getValue2("webabcd"<span>);
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue3();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue4();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue5();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue6();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue7();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>getValue8();
</span><span>echo</span> "<br>"<span>;
</span><span>echo</span><span>$myClass1</span>-><span>alias();
</span><span>echo</span> "<br>";
Salin selepas log masuk


OK
[源码下载]

以上就介绍了速战速决 4 - PHP: 类基础, 抽象类, 接口, trait,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
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

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

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara Huawei GT3 Pro dan GT4? Apakah perbezaan antara Huawei GT3 Pro dan GT4? Dec 29, 2023 pm 02:27 PM

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

Penjelasan terperinci tentang penggunaan pulangan dalam bahasa C Penjelasan terperinci tentang penggunaan pulangan dalam bahasa C Oct 07, 2023 am 10:58 AM

Penggunaan pulangan dalam bahasa C ialah: 1. Untuk fungsi yang jenis nilai pulangannya adalah batal, anda boleh menggunakan pernyataan pulangan untuk menamatkan pelaksanaan fungsi lebih awal 2. Untuk fungsi yang jenis nilai pulangannya tidak batal, fungsi bagi penyataan pulangan adalah untuk menamatkan pelaksanaan fungsi Hasilnya dikembalikan kepada pemanggil 3. Menamatkan pelaksanaan fungsi lebih awal, kita boleh menggunakan penyataan pulangan untuk menamatkan pelaksanaan fungsi lebih awal jika fungsi tidak mengembalikan nilai.

Apakah perintah pelaksanaan pemulangan dan akhirnya pernyataan di Jawa? Apakah perintah pelaksanaan pemulangan dan akhirnya pernyataan di Jawa? Apr 25, 2023 pm 07:55 PM

Kod sumber: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}akhirnya{x=3;}}}# Output Output kod di atas hanya boleh membuat kesimpulan: return dilaksanakan sebelum akhirnya. Mari kita lihat apa yang berlaku pada tahap bytecode. Yang berikut memintas sebahagian kod bait kaedah case1 dan membandingkan kod sumber untuk menganotasi maksud setiap arahan dalam

Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Betulkan: Alat snipping tidak berfungsi dalam Windows 11 Aug 24, 2023 am 09:48 AM

Mengapa Alat Snipping Tidak Berfungsi pada Windows 11 Memahami punca masalah boleh membantu mencari penyelesaian yang betul. Berikut ialah sebab utama Alat Snipping mungkin tidak berfungsi dengan betul: Focus Assistant dihidupkan: Ini menghalang Snipping Tool daripada dibuka. Aplikasi rosak: Jika alat snipping ranap semasa pelancaran, ia mungkin rosak. Pemacu grafik lapuk: Pemacu yang tidak serasi mungkin mengganggu alat snipping. Gangguan daripada aplikasi lain: Aplikasi lain yang sedang berjalan mungkin bercanggah dengan Alat Snipping. Sijil telah tamat tempoh: Ralat semasa proses naik taraf boleh menyebabkan penyelesaian mudah ini sesuai untuk kebanyakan pengguna dan tidak memerlukan sebarang pengetahuan teknikal khusus. 1. Kemas kini apl Windows dan Microsoft Store

Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Jan 30, 2024 am 09:08 AM

Dalam era perkembangan teknologi yang pesat hari ini, bahasa pengaturcaraan bermunculan seperti cendawan selepas hujan. Salah satu bahasa yang telah menarik perhatian ramai ialah bahasa Go, yang digemari oleh ramai pembangun kerana kesederhanaan, kecekapan, keselamatan serentak dan ciri-ciri lain. Bahasa Go terkenal dengan ekosistemnya yang kukuh dengan banyak projek sumber terbuka yang sangat baik. Artikel ini akan memperkenalkan lima projek sumber terbuka bahasa Go yang dipilih dan membawa pembaca untuk meneroka dunia projek sumber terbuka bahasa Go. KubernetesKubernetes ialah enjin orkestrasi kontena sumber terbuka untuk automatik

Keperluan pembangunan bahasa Go: 5 cadangan rangka kerja yang popular Keperluan pembangunan bahasa Go: 5 cadangan rangka kerja yang popular Mar 24, 2024 pm 01:15 PM

"Go Language Development Essentials: 5 Syor Rangka Kerja Popular" Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go digemari oleh semakin ramai pembangun. Untuk meningkatkan kecekapan pembangunan dan mengoptimumkan struktur kod, ramai pembangun memilih untuk menggunakan rangka kerja untuk membina aplikasi dengan cepat. Dalam dunia bahasa Go, terdapat banyak rangka kerja yang sangat baik untuk dipilih. Artikel ini akan memperkenalkan 5 rangka kerja bahasa Go yang popular dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan rangka kerja ini dengan lebih baik. 1.GinGin ialah rangka kerja web yang ringan dengan pantas

Cara Membetulkan Ralat Tidak Dapat Menyambung ke App Store pada iPhone Cara Membetulkan Ralat Tidak Dapat Menyambung ke App Store pada iPhone Jul 29, 2023 am 08:22 AM

Bahagian 1: Langkah Penyelesaian Masalah Awal Menyemak Status Sistem Apple: Sebelum menyelidiki penyelesaian yang rumit, mari kita mulakan dengan asas. Masalahnya mungkin tidak terletak pada peranti anda; Lawati halaman Status Sistem Apple untuk melihat sama ada AppStore berfungsi dengan betul. Jika terdapat masalah, anda hanya boleh menunggu Apple membetulkannya. Semak sambungan Internet anda: Pastikan anda mempunyai sambungan internet yang stabil kerana isu "Tidak dapat menyambung ke AppStore" kadangkala boleh dikaitkan dengan sambungan yang lemah. Cuba tukar antara Wi-Fi dan data mudah alih atau tetapkan semula tetapan rangkaian (Umum > Tetapkan Semula > Tetapkan Semula Tetapan Rangkaian > Tetapan). Kemas kini versi iOS anda:

Penjelasan terperinci tentang peranan dan penggunaan kata kunci gema dalam PHP Penjelasan terperinci tentang peranan dan penggunaan kata kunci gema dalam PHP Jun 28, 2023 pm 08:12 PM

Penjelasan terperinci tentang peranan dan penggunaan kata kunci gema dalam PHP PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas, yang digunakan secara meluas dalam pembangunan web. Kata kunci gema ialah kaedah yang digunakan untuk mengeluarkan kandungan dalam PHP. Artikel ini akan memperkenalkan secara terperinci fungsi dan penggunaan kata kunci gema. Fungsi: Fungsi utama kata kunci gema adalah untuk mengeluarkan kandungan ke penyemak imbas. Dalam pembangunan web, kita perlu mempersembahkan data secara dinamik ke halaman hadapan Pada masa ini, kita boleh menggunakan kata kunci gema untuk mengeluarkan data ke halaman. e

See all articles