速戰速決 4 - PHP: 類別基礎, 抽象類別, 介面, trait
[源碼下載]
作者:webabcd
介紹
速戰速決 之PHP
- 介紹
- 速戰速決 之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 />";
2、類的相關知識點
<?<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 />";
2、類的相關知識點2(抽象類別,,tratra class/class2.php
rrreee
[原始碼下載]
以上就介紹了速戰速決 4 - PHP: 類別基礎, 抽象類別, 介面, trait,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
🎜 🎜
熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

C語言return的用法有:1、對於傳回值類型為void的函數,可以使用return語句來提前結束函數的執行;2、對於傳回值型別不為void的函數,return語句的作用是將函數的執行結果傳回給呼叫者;3、提前結束函數的執行,在函數內部,我們可以使用return語句來提前結束函數的執行,即使函數並沒有回傳值。

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

原始碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}#輸出上述程式碼的輸出可以簡單地得出結論:return在finally之前執行,我們來看下字節碼層面上發生了什麼事情。下面截取case1方法的部分字節碼,並且對照源碼,將每個指令的含義註釋在

在現今科技快速發展的時代,程式語言也如雨後春筍般湧現。其中一門備受矚目的語言就是Go語言,它以其簡潔、高效、並發安全等特性受到了許多開發者的喜愛。 Go語言以其強大的生態系統而著稱,其中有許多優秀的開源專案。本文將介紹五個精選的Go語言開源項目,帶領讀者一起探索Go語言開源專案的世界。 KubernetesKubernetes是一個開源的容器編排引擎,用於自

Laravel是一個流行的PHP框架,具有高度可擴展性和高效性,它提供了許多強大的工具和程式庫,讓開發者可以快速建立高品質的網路應用程式。其中,LaravelEcho和Pusher是兩個非常重要的工具,透過它們可以輕鬆實現WebSockets通信,本文將詳細介紹如何在Laravel應用程式中使用這兩個工具。什麼是WebSockets? WebSockets

PHP中echo關鍵字的作用和使用方法詳解PHP是一種廣泛使用的伺服器端腳本語言,它在網頁開發中被廣泛應用。而echo關鍵字是在PHP中用來輸出內容的一種方法。本文將詳細介紹echo關鍵字的作用與使用方法。作用:echo關鍵字的主要作用是將內容輸出到瀏覽器。在網頁開發中,我們需要將資料動態地呈現到前端頁面上,這時就可以使用echo關鍵字將資料輸出到頁面上。 e

目前最受歡迎的Go框架有:Gin:輕量級、高效能的Web框架,簡潔易用。 Echo:快速、高度可自訂的網路框架,提供高效能路由和中介軟體。 GorillaMux:快速、靈活的多工器,提供進階路由設定選項。 Fiber:效能最佳化的高效能Web框架,處理高並發請求。 Martini:物件導向設計的模組化網路框架,提供豐富的功能集。
