面向對象、繼承、抽象方法重載知識點整理

面向過程、面向對象

  面向過程:從開始到結束自己獨立完成

  面向對象:將一個事物劃分為單體來各自實現區域性的功能,最后通過調用組合完成

類、對象

  類:某一些具有共同特征的物體

  對象:指某一種具體的物體,屬于某一個類


類成員(成員屬性,成員方法)

  類里面只包括屬性和方法

  使用屬性的格式為:$對象->屬性名(屬性名前不加$符號)

  方法直接在類里面定義


靜態屬性、靜態方法

  在定義屬性的時候,前面加上static就是靜態屬性,只屬于類本身

  靜態屬性的使用: :: $靜態屬性名::雙冒號)

?

  靜態方法也是只屬于類,不屬于具體對象

  靜態方法中不能掉用非靜態方法

  靜態方法的使用:類名 :: $靜態方法名::雙冒號)

  如果通過類名來調用靜態方法,不能出現$this關鍵字

?


構造__construct()、析構方法__destruct()

插入一個對象的同時,也給這個對象賦值,然后本身就會有屬性值,可以在本類內調用

例:

class Teacher{

???  ?public $name="匿名";

???  ?public $age="未知";

??  ??public $eduction="未知";

???  ?function ?_?_construct($name,$age,$eduction){

??????  ??$this->name=$name;

?????  ???$this->age=$age;

?????  ???$this->eduction=$eduction;

  ? ?}

??  ??function showAllInfo(){

    echo"<br/>hi,大家好,我叫".$this->name;

    echo"<br/>今年".$this->age."";

???  ? ? echo "<br/>學歷:".$this->eduction;

???  ?}

}

$teacher1=new Teacher("張三",22,"本科");

$teacher2=new Teacher("李四",23,"研究生");

$teacher1->showAllInfo();

echo "<br>";

$teacher2->showAllInfo();
  1,該方法名字是固定的,為:_ _construct();注意:兩個下劃線
  2該方法必須是普通方法(不能是靜態方法)
  3,通常該方法應該是public
  4,通常該方法中使用$this這個關鍵字來對屬性進行賦值
  5,當new 類名()的時候,其實是在調用該構造方法
  6在一個類中有構造方法,那么在本類的方法中就會調用構造方法中的值

?

構造 方法是“創建”對象的時候會自動調用。

析構 方法是“銷毀”對象的時候會自動調用。

?

說明:

  1,析構方法通常不太需要去定義。

  2,析構方法不能調用。

  3,析構方法不能有形參。

  4,析構方法中可以用于清理一些在php代碼結束后不能清理的數據,如生成的文件。

 對象銷毀的幾個情形:

腳本程序運行結束,自動銷毀;

明確地unset()一個對象變量,則被銷毀;

改變對象變量的值,被銷毀;

?

?

$thisselfparent

$this:$this是一個“偽對象”,代表當前所屬類的當前對象。

Self:含義:代表當前類

只能在某個類的方法里代表該類的名稱

Class S{

  Public $v=1;

  Static funcation new(){

    Return new self;//self代表當前類

    //new self 代表當前類的一個對象

  }

}

$obj = S::new(); //通過s的靜態方法得到當前類的一個新對象

Var_dump($obj);

?

Parent:代表父類

一般用于子類調用父類內容時使用,通常使用父類的靜態類

?

class C{

  public $p1 = 1;

  function showMe(){

    echo "<br />我是父類,數據有:";

    echo "<br />Cp1=" . $this->p1;

  }

  function _ _construct($p1){

    $this->p1 = $p1;

  }

}

class D extends C{

  public $p2 = 2;

  function __construct($p1,$p2){

    //經典用法

    parent::__construct($p1);//調用父類的構造函數來初始化p1

    $this->p2 = $p2; //初始化p2

}

function showMe2(){

  echo "<br />我是子類,數據有:";

  //基本用法:

  parent::showMe();//調用父類的showMe方法, ?使用靜態方法調用

  echo "<br />Dp2=" . $this->p2;

  }

}

$d1 = new D(10,20); //此時就需要尊照構造函數的參數結構來使用

$d1->showMe2();


publicprotectedprivatestatic

public:公共的(只要在文檔中都可以用)一般用于設置變量

protected:受保護的(可以在當前類或當前類的上下級具有繼承關系的類中訪問)

private:私有的(只能在當前類中使用)

extends :繼承 (子類繼續父類)

Static:靜態

?

重寫、重載__set()__get()__isset()__unset()

所謂屬性重載,就是在面對上述4種情形的屬性使用場景中,該對象如果來“應對”的問題。

如果某屬性不存在,但在語法中使用如下情形,則會發生:

  都稱之為:魔術方法“”

    取值:$v1 = 對象->屬性; ===>自動調用類中的__get()方法

    賦值:對象->屬性 = XX值; ===>自動調用類中的__set()方法

    判斷是否存在:isset(對象->屬性;) ===>自動調用類中的__isset()方法

    銷毀:unset(對象->屬性;) ===>自動調用類中的__unset()方法

?

重寫關鍵字:override

例子:

class C{

  function show1($para1){

  echo "<br />父類的show1方法:para1 = " . $para1;

  }

}

class D extends C{

  function show1($para, $para2){//參數不一致

  echo "<br />子類的show1方法";

  }

}

在繼承關系中使用,可以節約代碼

重載方法

在一個類中,有多個同名的方法,每個方法的參數不同而已。這種現象就稱為“重載”

參數不同可以是:數量個數不同,或類型不同,或順序不同

例子

class ?A{

  int ?function ?f1(int ?x){......}

  int ?function ?f1(int ?x, ?int ?y){.....}

  int ?function ?f1(string s ??int ?m){....}

}

PHP中重載只是一個概念

?


__call()?__callStatic()?__clone()

方法重載關鍵字:__call

例子:

Function f1(){

  Echo ”f1被調用

}

Function f2$x,$y{

  echo ”f2被調用”;

  return $x+$y;

}

Class a{

  Public $p1=1;

  Function __call($x,$arr){

    $c=count($array);

    If($c==0){

      F1();

    }else if(){

      Return f2($arr[0],$arr[1]);

    }

  }

}

$d=new a();

$d->f1();

$v1=$d->f1(1,2)//f1不存在兩個參數

echo "<br />d1里面的p1=" . $d1->p1;

echo "<br />結果v1=" . $v1;

執行結果
f1被調用
f1被調用

o1里面的p1=1
結果v1=3

一個對象還可以使用clone運算符進行克隆,則就也會“生成”新對象。

當使用一個對象(類)調用一個不存在的靜態方法的時候,會自動去調用預先定義好的"__callStatic方法。(該方法必須帶2個參數

?


extendsabstract

  Extends:子類繼承父類

  Abstract抽象類

  在正常定義類的前面,加上關鍵字:abstract,那就構成抽象類。

  abstract ?class ?類名{.....類的定義.....}

  接口interface


單例:
1、私有屬性(值是對象)
2、私有構造方法(不能new)
3、提供獲取對象的方法(這里面判斷是否存在)
4、私有克隆

面向對象三大特性:封裝、繼承、多態

?

?

工廠模式

class factory{

  //Instance表示“實例”,“對象”

  static function getInstance($className){

    if(file_exists('./class/' . $className . ".class.php")){

    $obj1 = new $className();

    return $obj1;

    }else{

      return null;//也可以die();

    }

  }

}

$obj1 = factory::getInstance("A");//獲取類A的一個對象

$obj2 = factory::getInstance("B");//獲取類B的一個對象

$obj3 = factory::getInstance("A");//再獲取類A的一個對象

?

優點:只需要指定對象就可以創建

?

最終類final class

通常,一個類,沒有特別聲明的話,則“別人”就可以隨意拿過來使用并對之進行“擴展”——繼承。

但是:

如果某個類不希望對其進行擴展,則可以將其聲明為“最終類”。

形式:

  final ?class ?類名{ 。。。。類定義。。。。}

最終方法final method

通常,一個方法,如果沒有特別聲明,則下級類就可以對其進行“覆蓋”(重寫)。

但是:

  如果某個方法不希望被下級類覆蓋,就可以對其生命為“最終方法”。

形式:

  final ?function ?方法名(){。。。。方法定義。。。。}

轉載于:https://www.cnblogs.com/1301694f/p/8519707.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539240.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539240.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539240.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python for循環n次_Python入門10 —— for循環

1.字符串依次取值 students [egon, lxx, alex] i 0 while i < 3: print(students[i]) i 1 2.針對循環取值操作&#xff0c;while循環并不擅長&#xff0c;于是python提供一個專門循環取值操作&#xff1a;for循環 students [egon, lxx, alex] for x in students: # 有幾…

hive與依賴環境的交互

與linux交互命令 格式 在linux的命令前加上!&#xff08;英文感嘆號&#xff09;&#xff0c;以;&#xff08;英文分號結尾&#xff09; 操作實例 !ls; !pwd; hive> !ls; app derby.log hadoop-2.7.2.tar.gz jdk-8u73-linux-x64.tar.gz metastore_db t.sql hive> !pw…

和平精英顯示服務器人數太多,和平精英到底有多差 導致玩家紛紛國際服

原標題&#xff1a;和平精英到底有多差 導致玩家紛紛國際服和平精英上線以來爭議不斷&#xff0c;百分之九十九是對和平精英的各種不滿&#xff0c;還有百分之一是喜歡和平精英&#xff0c;認為刺激戰場已經免費給我們玩&#xff0c;讓騰訊虧了很多錢&#xff0c;現在和平精英上…

python中的wx_配置 Python的wxWidgets可視開發環境 | 學步園

注&#xff1a;轉載請注明出處 一、下載 Python 2.5.1 這一步是必須做的&#xff0c;下載 Python 語言的 SDK 下載地址(直接復制到迅雷)&#xff1a;點擊下載 下載完成后安裝 Python 2.5.1&#xff0c;注意安裝路徑中不要有空格&#xff0c;不然會引起一些問題。 二、下載 wxPy…

的write方法有哪些參數_向子進程傳遞大量數據的方法

如何傳遞大型數據給子進程昨天的一篇文章中&#xff0c;我們說到如果想向一個子進程傳輸多于32767個字符的數據&#xff0c;我們需要尋找其他的方法(而不是命令行參數)來實現。我們能想到的第一個方法是&#xff1a;WM_COPYDATA。當子進程創建并進入消息循環后&#xff0c;我們…

厲害了!中關村軟件園人工智能軍團有料有看點

人工智能已成為當下全球科技界的新熱點&#xff0c;中外競相攀登這座劃時代的科技高峰。上月&#xff0c;國務院印發《新一代人工智能發展規劃》&#xff0c;明確將人工智能作為未來國家重要的發展戰略。《規劃》提出前瞻布局新一代人工智能重大科技項目&#xff0c;到2030年中…

Hive的使用之hwi

概述 hwi是hive開發的網頁形式查看數據。方便非專業人士使用。 安裝步驟 1、下載hive源碼包 地址&#xff1a;http://apache.fayea.com/hive/ apache-hive-2.1.0-src.tar.gz 2、打包war 解壓apache-hive-2.1.0-src.tar.gz源碼包&#xff0c;進入到 C:\Users\zengmg\Deskto…

c 服務器傳輸大文件,cend.me:不須經過服務器,直接點對點的文件傳輸免費服務...

要傳送文件給遠程的手機、平板、電腦等設備&#xff0c;通常的做法就是先將文件上傳到服務器存放&#xff0c;然后再從服務器下載&#xff0c;這樣的做法看似合理&#xff0c;但如果上傳的同時就由遠程的設備來接收&#xff0c;不要經過服務器&#xff0c;這樣就能更節省上、下…

win10系統遷移后系統重裝_win7/win10系統遷移到新SSD硬盤的方法

隨著固態硬盤的普及&#xff0c;越來越多的朋友把電腦的硬盤換成了固態&#xff0c;原來的機械硬盤當數據盤使用&#xff0c;關于在固態硬盤中安裝系統&#xff0c;那是簡單的&#xff0c;和機械硬盤一樣&#xff0c;當是對原來的系統比較重要&#xff0c;不能重裝的朋友來說&a…

hive參數配置使用

概述 set命令設置hive的參數。 ${} 可以獲取配置項的值&#xff0c;作為參數使用。 在啟動hive時可以傳入配置項啟動。 hive參數初始化配置set命令~/.hiverc hive參數介紹 輸入set&#xff0c;可以查看所有可設置項和現在設置項的值。 hive> set; 項太多了&#xff…

Thrift源碼學習二——Server層

Thrift 提供了如圖五種模式&#xff1a;TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadSelectorServer ?? TSimpleServer、TThreadPoolServer 屬于阻塞模型 TNonblockingServer、THsHaServer、TThreadedSelectorServer 屬于非阻塞模型 TServer…

linux top 命令可視化_25個Linux性能監控工具

一段時間以來&#xff0c;我們在網上向讀者介紹了如何為Linux以及類Linux操作系統配置多種不同的性能監控工具。在這篇文章中我們將羅列一系列使用最頻繁的性能監控工具&#xff0c;并對介紹到的每一個工具提供了相應的簡介鏈接&#xff0c;大致將其劃分為兩類&#xff0c;基于…

base64是哪個jar包的_漲知識 | 用maven輕松管理jar包

前言相信只要做過 Java 開發的童鞋們&#xff0c;對 Ant 想必都不陌生&#xff0c;我們往往使用 Ant 來構建項目&#xff0c;尤其是涉及到特別繁雜的工作量&#xff0c;一個 build.xml 能夠完成編譯、測試、打包、部署等很多任務&#xff0c;這在很大的程度上解放了程序員們的雙…

Hive數據類型

概述 Hive的內置數據類型可以分為兩大類&#xff1a;(1)、基礎數據類型&#xff1b;(2)、復雜數據類型。 基礎數據類型 數據類型 所占字節 開始支持版本 TINYINT 1byte&#xff0c;-128 ~ 127 SMALLINT 2byte&#xff0c;-32,768 ~ 32,767 INT 4byte,-2,147,483,648 ~ 2,14…

JMS(Java消息服務)與消息隊列ActiveMQ基本使用(一)

最近的項目中用到了mq&#xff0c;之前自己一直在碼農一樣的照葫蘆畫瓢。最近幾天研究了下&#xff0c;把自己所有看下來的文檔和了解總結一下。 一. 認識JMS 1.概述 對于JMS,百度百科&#xff0c;是這樣介紹的&#xff1a;JMS即Java消息服務&#xff08;Java Message Service&…

python單詞反轉_python文本 字符串逐字符反轉以及逐單詞反轉

python文本 字符串逐字符反轉以及逐單詞反轉 場景&#xff1a; 字符串逐字符反轉以及逐單詞反轉 首先來看字符串逐字符反轉&#xff0c;由于python提供了非常有用的切片&#xff0c;所以只需要一句就可以搞定了 >>> aabc edf degd >>> a[::-1] dged fde cba …

hive復合數據類型之struct

概述 STRUCT&#xff1a;STRUCT可以包含不同數據類型的元素。這些元素可以通過”點語法”的方式來得到所需要的元素&#xff0c;比如user是一個STRUCT類型&#xff0c;那么可以通過user.address得到這個用戶的地址。 操作實例 1、創建表 create table student_test(id int,in…

pycharm 運行celery_Celery全面學習筆記

來源介紹Celery 是 Distributed Task Queue&#xff0c;分布式任務隊列。分布式決定了可以有多個 worker 的存在&#xff0c;隊列表示其是異步操作。Celery 核心模塊Celery有一下5個核心角色Task就是任務&#xff0c;有異步任務和定時任務Broker中間人&#xff0c;接收生產者發…

hive復合數據類型之array

概述 ARRAY&#xff1a;ARRAY類型是由一系列相同數據類型的元素組成&#xff0c;這些元素可以通過下標來訪問。比如有一個ARRAY類型的變量fruits&#xff0c;它是由[apple,orange,mango]組成&#xff0c;那么我們可以通過fruits[1]來訪問元素orange&#xff0c;因為ARRAY類型的…

Exploit開發系列教程-Mona 2 SEH

P3nro5e 2015/07/10 10:580x00 Mona 2 前言 & 準備Mona 2是一種非常有用的插件&#xff0c;它由Corelan Team開發。起初是為Immunity Debugger寫的&#xff0c;現在它適用于WinDbg調試器。你將需要為WinDbg x86 和 WinDbg x64安裝一些工具&#xff1a;安裝Python 2.7 (從這…