PHP課程筆記8

來源:互聯網
上載者:User

標籤:

課時154 PHP類的訪問類型控制

1.子類用extends 來繼承,

2.private 只能自己使用,自己的子類都不行

3.protected 保護許可權,可以是自己和自己的子類使用,其他的不行.

課時155 PHP繼承中的重載(覆蓋)

對象 -> 成員

類 :: 成員

parent::成員  使用此來調用父類中被覆蓋的方法

重要:  只要是子類的構造方法,去覆蓋父類的構造方法,一定要在子類的最上面調用一次父類的構造方法.

許可權問題: 子類只能大於或等於父類的許可權.

課時156 PHP常見的關鍵字

final 可以修飾類  ---這個類不能有子類,不讓擴充

final 可以修飾方法 ---這個方法就能在子類中覆蓋

final 不可以修飾成員屬性

課時157 static關鍵字的使用1

static 可以可以修飾屬性和方法,但不能修飾類

它修飾的成員方法,可以存在記憶體的初始化靜態段.

可以被所有同一個類的對象共用.

1.第一次用到這個類時,類載入到記憶體中,就已經將靜態成員加到了記憶體裡

 課時158 static關鍵字的使用2

1.static修飾的成員也可以修改值

2.self可以在類中的方法中,代表自己類的($this)

self::$bianliang

3.靜態成員一旦被載入,只有在指令碼結束後才釋放

4.靜態方法可以在不經過建立對象就直接使用

5.在靜態方法中,是不能訪問非靜態成員的,

6.只要是能使用靜態環境下聲明方法,最好使用靜態方法,主要是考慮到效率

 

 課時159 單態(單例、單件)設計模式

<?php
/*

*   一個類只能有一個對象存在
* 單態(單例)設計模式 -- 最適合PHP使用這個設計模式
*
* 1.如果想讓一個類,只能有一個對象,就要先讓這個類不能建立對象.將構造方法私人化(private)
* 2.可以在類的記憶體中使用一個靜態方法,來建立對象方法
*/
class Person {

static $obj = null;

private function __construct(){

}

static function getobj(){
//如果第一次調用時沒有對象,則建立,以後調用時,直接使用第一次建立的對象.
if(is_null(self::$obj)){
self::$obj = new self;
}
return self::$obj;
}

function say(){

echo "hahahahahahah<br>";
}

function __destruct(){

echo "#######<br>";
}
}

$p = Person::getobj();
$p -> say();
$p = person::getobj();
$p = person::getobj();

?>

結果:

hahahahahahah
#######

課時160 const關鍵字

<?php
/*
*
* define("常量名","值")
* 不能在類裡用define定義常量
*
* const修飾的成員屬性為常量,也只能修飾成員屬性
* final 修飾類和方法
* static 修飾屬性和方法
*
* 1.常量建議使用大寫,不能使用$
* 2.常量一定要在申明時就給好初值
* 3.常量的訪問方式和靜態訪問方式一樣,但只能讀
* a.在類外部使用 類::常量名
* b.在類的內部使用 self::常量名
* 4.
*
*/

define("ROOT","/user/local/lib/");

class Demo{
public $name;
//define(); 不能使用
const SEX="男";

static function say(){
echo "<br>我的性別是".self::SEX."性<br>";
}
}

echo Demo::SEX;
Demo::say();

?>

結果:

男
我的性別是男性

課時161 魔術方法__toString()

<?php
/*
* __construct()
* __destruct()
* __set()
* __get()
* __isset()
* __unset()
*
* 特點
* 1.自動調用,但不同的魔術方法有自己的調用時機
* 2.都是以"__"(雙底線)開頭的方法
* 3.所有的魔術方法名都是固定的
* 4.如果不寫,就不存在,也就沒有預設的功能
*
* __toString()
* 1.是在直接使用 echo print printf輸出一個對象引用時,自動調用這個方法
* 2.將對象的基本資料放在__toString()方法內部,形成字串返回
* 3.__toString()方法中不能有參數,而且必須返回一個字串
*/
class Person{
public $name;
public $age;
public $sex;

function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}

function say(){

}

function __toString(){
$a = "這樣可以?";
$b = "設定變數再返回";
return $b.$a;
}
}

$p = new Person("六六",12,"女");
echo $p;
?>

結果:

設定變數再返回這樣可以?

課時162 魔術方法__clone()

<?php
/*
* 1.使用clone這個關鍵字複製對象,記憶體中會存在兩個對象
*
* __clone()魔術方法
* 1.在複製對象時,自動調用該方法
* 2.作用:和構造方法一樣,是對新複製的對象進行初始化
* 3.在這個方法中$this代表的是副本,所以就可以給所有的副本成員初始化
*/

class Person{
public $name;
public $age;
public $sex;

function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}

function say(){
echo "我的名字是{$this->name}<br>";
}

function __toString(){
return "aaa";
}

function __destruct(){
echo "123<br>";
}

function __clone(){
echo "我是複製的:";
$this->name = "zaj";
}
}

$p = new Person("sce",13,"man");

$p -> say();

$p2 = clone $p;

$p2 -> say();
?>

結果:

我的名字是sce
我是複製的:我的名字是zaj
123
123

課時163 魔術方法__call()

<?php
/*
* 通過__call()處理錯誤調用
*
* __call()
* 1.就是在調用一個對象中不存在的方法時,自動調用的方法
* 2.有兩個參數: 第一個參數,調用的不存在的方法的方法名,第二個參數,是調用這個不存在的方法的方法參數
* 3.可以把功能比較相似的方法合成一個去寫
* 4.作用: 可以寫提示,但這個不是主要功能. 第二個功能,就是3裡標明的可以把方法名不同但功能相似的合成一個來寫
*
*/

class Person{

public $arr = array("a","b","c");

function __call($method,$args){
//echo "出錯了,{$method}不存在<br>";
if(in_array($method,$this->arr)){
echo $args[0],"<br>";
}else{
echo "調用方法{$method}不存在<br>";
}
}

}

$p = new Person();

$p -> eat("肉");

$p -> a("a");
$p -> b("b");
?>

結果:

調用方法eat不存在
a
b

課時164 對象序列化(序列化)1

<?php
/*
* 對象序列化(序列化) --- 將對象轉成字串(不用看懂字串)
* 返序列化 --- 將字串轉為對象
* 注意: 轉化的時機:
* 1.將對象在網上傳輸時要將對象序列化
* 2.將對象長時間儲存,儲存到資料庫儲存到檔案要將對象序列化
*
*
*/

include "clone.php";

$s = new Person("zaj",123,"man");
$s -> say();

//將對象序列化
$str = serialize($s);

//將對象儲存在檔案中
file_put_contents("objstr.txt",$str);

echo "對象轉完字串,儲存到檔案中成功<br>";

//返序列化
//對出字串中檔案中
$str2 = file_get_contents("objstr.txt");
$ss = unserialize($str2);
$ss -> say();
?>

結果:

我的名字是zaj
對象轉完字串,儲存到檔案中成功
我的名字是zaj
123
123

 

PHP課程筆記8

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.