亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 34
粉絲 1
評論 0
訪問量 43129
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
類聲明與類的實(shí)例化和類常量與雷屬性的重載以及類的繼承與方法的重寫還有類中靜態(tài)成員的聲明與訪問--2018年9月5日
coolperJie
原創(chuàng)
895人瀏覽過

1、以下代碼是類的聲明與實(shí)例化的知識(shí),主要使用到了類的聲明主要使用關(guān)鍵字class,類的實(shí)例化主要用到關(guān)鍵字new,對象的成員反問符使用:->來實(shí)現(xiàn):

實(shí)例

<?php
/**
 * 類的聲明與實(shí)例化
 * 1. 類聲明: class;
 * 2. 類的實(shí)例化: new
 * 3. 對象成員的訪問:->
 */

//用關(guān)鍵字class聲明一個(gè)類
class Stu{

}

//用關(guān)鍵字 new 實(shí)例化一個(gè)類
$stu = new Stu();

//給當(dāng)前對象添加一些屬性和方法
$stu->name = "王豪杰";
$stu->sex = "男";
$stu->hello = function (){
	return "這是一個(gè)自定義的類方法";
};

//使用對象訪問符:-> 來訪問對象中的成員(屬性和方法)
echo $stu->name.':'.$stu->sex.'<br>';

//錯(cuò)誤的調(diào)用方式,因?yàn)楫?dāng)前對象方法不是一個(gè)普通函數(shù),而是一個(gè)對象方法
// echo $stu->hello();

//正確的調(diào)用方式,對象方法應(yīng)該以回調(diào)的方式運(yùn)行
echo call_user_func($stu->hello);



?>

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

說明:以上代碼主要介紹了類的聲明與實(shí)例化的知識(shí)點(diǎn),是面向?qū)ο蟮幕A(chǔ)知識(shí),需要熟練的掌握才能進(jìn)一步學(xué)習(xí)更多面向?qū)ο蟮闹R(shí)。

2,一下代碼主要介紹了類常量和類屬性的重載知識(shí)點(diǎn):

實(shí)例

<?php

/**
 * 類常量,對象初始化,屬性的重載
 * 1. 類常量可用來創(chuàng)建對象之間的共享數(shù)據(jù)
 * 2. 對象初始化: 用構(gòu)造方法實(shí)現(xiàn),創(chuàng)建對象之前會(huì)自動(dòng)調(diào)用,完成對象的一些初始化工作
 *    例如:對象屬性初始化,創(chuàng)建對象時(shí)自動(dòng)調(diào)用的方法等,方法名稱固定:__construct()
 * 3.屬性重載:在類的外部訪問不存在或者無權(quán)限訪問的屬性時(shí),會(huì)自動(dòng)觸發(fā)此類方法調(diào)用
 *   屬性重載涉及四個(gè)方法:__get(),__set(),__isset(),__unset()
 */

class Student{
	//類常量:所有對象共享,用類名加范圍解析符(::)訪問,且默認(rèn)為公共屬性public
	//類常量可用來創(chuàng)建對象之間的共享數(shù)據(jù)
	const COURSE_NAME = 'php中文網(wǎng)';

	//聲明三個(gè)私有的屬性
	private $name;
	private $course;
	private $grade;

	//構(gòu)造方法
	public function __construct($name,$course,$grade)
	{
		$this->name = $name;
		$this->course = $course;
		$this->grade = $grade;
		//構(gòu)造方法中不僅可以初始化對象屬性,還可以調(diào)用類方法
		echo $this->show();
	}

	//輸出屬性內(nèi)容
	public function show(){
		return $this->name .'的《'.$this->course.'》課程的成績是:'.$this->grade.'分!';
	}

	//更新屬性的重載,魔術(shù)方法__set()
	public function __set($name,$value){
		if($name == 'grade'){
			return $name.':屬性不能修改';
		}
		$this->$name = $value;
	}

	//獲取屬性的重載
	public function __get($name){
		if($name == 'grade'){
			return $name.':屬性不存在';
		}
		return $this->$name;
	}

	//屬性檢測的重載
 	 public function __isset($name){
        if ($name == 'course') {
            return false;
        }
        return isset($this->$name);
    }

    //銷毀屬性的重載
    public function __unset($name)
    {
        if ($name == 'grade' || $name == 'name') {
            return false;
        }
        unset($this->$name);
    }
}
//訪問類常量:類常量可以被該類的所有對象所共享,所以不屬于任何一個(gè)對象,應(yīng)該使用類來訪問
echo '站點(diǎn)名稱: ', Student::COURSE_NAME, '<br>';

//實(shí)例化Student,創(chuàng)建對象
$stu = new Student('小豪','PHP',100);
var_dump($stu);
//訪問屬性,因?yàn)閷傩匀勘环庋b,所以必須通過一個(gè)統(tǒng)一的外部接口訪問
echo $stu->show();
echo'<hr>';

//如果想簡化以上操作,可以在實(shí)例化之前,在構(gòu)造方法中調(diào)用屬性訪問接口方法
new Student('小杰','PHP', 99);
echo '<hr>';

//屬性操作: 獲取,設(shè)置,檢測,銷毀
//獲取
echo '姓名: '.$stu->name.'<br>';// 訪問私有屬性,如類中無__get()會(huì)出錯(cuò),如有自動(dòng)觸發(fā)
echo '成績: '.$stu->grade.'<br>';  // 可以在__get()進(jìn)行屬性訪問的權(quán)限控制


//設(shè)置
$stu->course = 'Java';
echo '課程: '. $stu->course.'<br>';// 訪問私有屬性,如類中無__set()會(huì)出錯(cuò),如有自動(dòng)觸發(fā)
$stu->grade = 66;

//檢測,因?yàn)間rade私有,所以外部檢測不到,如類中有__isset()方法就可以檢測到
echo isset($stu->name) ? '存在<br>' : '<span style="color:red">不存在</span><br>';
echo isset($stu->grade) ? '存在<br>' : '<span style="color:red">不存在</span><br>';

//銷毀
unset($stu->course);
//echo $stu->course,'<br>'; //解除注釋,就會(huì)報(bào)錯(cuò)提示該屬性不存在

unset($stu->name);    // 重載方法中__unset()不允許銷毀grade和name屬性
echo $stu->name,'<br>';   // 所以這里仍可以訪問到name屬性

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

運(yùn)行截圖:

demo3.png

說明:以上代碼通過實(shí)例實(shí)現(xiàn)了類常量和類屬性的重載技術(shù):其中類常量可用來創(chuàng)建對象之間的共享數(shù)據(jù),在類的外部訪問不存在或者無權(quán)限訪問的屬性時(shí),會(huì)自動(dòng)觸發(fā)魔術(shù)方法方法調(diào)用,重載包含上的系統(tǒng)函數(shù)主要有四個(gè):__get(),__set(),__isset(),__unset()。

3,以下代碼主要介紹了類的繼承與方法重寫,繼承關(guān)鍵字為extends:

實(shí)例

<?php

/**
 * 對象三要素之: 繼承與多態(tài)
 * 1. 繼承是指類之間的繼承,是代碼復(fù)用的重要手段,之前我們是通過"函數(shù)"實(shí)現(xiàn)的代碼復(fù)用
 * 2. 繼承使用關(guān)鍵字: extends
 * 3. 引用父類成員: parent::
 * 4. 子類可以將父類中的公共和受保護(hù)成員全部繼承
 */

class Teacher{
	//父類屬性
	public $name;
	public $age;
	private $grade;
	const APP_NAME = '教師管理系統(tǒng)';

	//父類構(gòu)造器
	public function __construct($name ,$age){
		$this->name = $name;
		$this->age = $age;
	}

	//屬性訪問重載
	public function __get($name){
		if(property_exists($this, $name)){
			return $this->$name;
		}
		return '<br>屬性不存在';
	}

}

class Student extends Teacher {
	//子類自有屬性
    private $sex;
    const APP_NAME = '學(xué)生管理系統(tǒng)';  //類常量可以在子類中重寫

     //子類將父類同名方法進(jìn)行重寫,根據(jù)傳入?yún)?shù)不同,實(shí)現(xiàn)不同的功能,這就是多態(tài)性
    public function __construct($name, $age, $sex='male')
    {

        // $this->name = $name;
        // $this->age = $age;
        //引用父類的構(gòu)造方法來簡化代碼
        parent::__construct($name, $age);
        $this->sex = $sex;
    }
    //將父類屬性重載方法重寫后,順利讀取子類屬性
    //所以屬性重載方法__get()應(yīng)該設(shè)置在最終工作類中(例如本類Demo4_1),而不是父類Demo4中
    //此時(shí),將父類Demo4中的__get()刪除,代碼執(zhí)行仍然正確
    public function __get($name)
    {
        if (property_exists($this, $name)) {
            return $this->$name;
        }
        return '屬性不存在<br>';
    }
}

$stu = new Student('whj',24);

//訪問父類中的屬性
echo $stu->name.'<br>';
echo $stu->age.'<br>';
echo $stu->grade.'<br>';   // 父類私有屬性子類不可見,訪問不到

echo Student::APP_NAME. '<br>';  // 訪問類常量
echo $stu->sex. '<br>'; //取不到值,因?yàn)楦割恄_get()不能識(shí)別子類屬性

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

說明:繼承是指類之間的繼承,是代碼復(fù)用的重要手段,繼承使用關(guān)鍵字: extends,引用父類成員: parent::值得注意的是子類繼承父類只可以將父類中的公有和受保護(hù)的成員全部繼承,另外子類將父類同名方法進(jìn)行重寫,根據(jù)傳入?yún)?shù)不同,實(shí)現(xiàn)不同的功能,這就是多態(tài)性;

4,以下代碼主要介紹了類中靜態(tài)成員的聲明與訪問,其中靜態(tài)成員聲明的關(guān)鍵字為static:

實(shí)例

<?php

/**
 * 類中的靜態(tài)成員與訪問
 * 1.類中靜態(tài)成員使用關(guān)鍵字:static 定義;
 * 2.靜態(tài)成員包括: 靜態(tài)屬性和靜態(tài)方法;
 * 3.靜態(tài)成員是屬于類的,我們應(yīng)該最終使用類來訪問;
 * 4.靜態(tài)屬性必須使用類來訪問,而靜態(tài)方法即可以用類,也可以用對象訪問;
 * 5.靜態(tài)成員是可以有訪問限制的: public,protected,private;
 * 6.靜態(tài)成員與對象無關(guān),所以內(nèi)部不允許使用偽變量: $this;
 * 7.訪問時(shí),類名后必須使用:范圍解析符:雙冒號(hào)[::]
 * 8.在類中引用自身使用關(guān)鍵字: self::
 *
 * 范圍解析符的作用:
 * 1. 訪問靜態(tài)成員;
 * 2. 訪問類常量;
 * 3. 繼承上下文中引用被覆蓋成員
 */

class Demo{
	public static $pdo = null;
	protected static $db = [
		'type'		=>	'mysql',
		'host'		=>	'localhost',
		'dbname'	=>	'db100',
		'user'		=>	'root',
		'pass'		=>	123456
	];

	public static function connect(){
		$dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname'];
	
		self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']);
	}

	public static function select($table,$fields='*',$num=5)
	{
		$stmt = self::$pdo->prepare("SELECT {$fields} FROM {$table} LIMIT {$num}");
		$stmt->execute();
		return $stmt->fetchAll(PDO::FETCH_ASSOC);
	}
}

//連接數(shù)據(jù)庫
Demo::connect();

//查詢數(shù)據(jù)庫
$result = Demo::select('user','name,id,password',5);

//顯示結(jié)果
echo '<pre>'.var_dump($result);

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例

說明:靜態(tài)成員是屬于類的,我們應(yīng)該最終使用類(self)來訪問,靜態(tài)屬性必須使用類來訪問,而靜態(tài)方法即可以用類,也可以用對象訪問;靜態(tài)成員與對象無關(guān),所以內(nèi)部不允許使用偽變量: $this。

總結(jié):今天學(xué)習(xí)了關(guān)于面向?qū)ο蟮牡谝粋€(gè),也是最基礎(chǔ)的東西。類的聲明和實(shí)例化,以及類常量和屬性的重載和類的繼承與方法的重寫,還有靜態(tài)變量的使用,類的三大特征封裝,繼承,和多態(tài),這些特征使得類的使用變得非常的靈活和多變,只有掌握好最最基礎(chǔ)的知識(shí)點(diǎn)才能在使用的時(shí)候信手拈來,還是需要多動(dòng)手敲代碼,熟能生巧就是這個(gè)道理。

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報(bào)處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)