《PHP實(shí)例:詳談PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法》要點(diǎn):
本文介紹了PHP實(shí)例:詳談PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP實(shí)戰(zhàn)PHP面向?qū)ο笾谐S玫年P(guān)鍵字???
PHP實(shí)戰(zhàn)final
PHP實(shí)戰(zhàn)1.final不能修飾成員屬性(類中常量不是用這個(gè)關(guān)鍵字)
PHP實(shí)戰(zhàn)2.final只能修飾類和方法
PHP實(shí)戰(zhàn)作用:
PHP實(shí)戰(zhàn)使用final修飾的類不能被子類繼承
PHP實(shí)戰(zhàn)使用final修飾的方法不能被子類覆蓋
PHP實(shí)戰(zhàn)用來(lái)限制類不被繼承,方法不被覆蓋就使用final
PHP實(shí)戰(zhàn)
<?php
//final修飾的類不能被繼承
final class Person{
var $name;
var $age;
var $sex;
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function fun1(){
echo $this->name;
}
}
//Student類繼承類用final修飾的Person類,所以會(huì)報(bào)錯(cuò)
class Student extends Person{
}
$stu=new Student("zs",20,"nan");
$stu->fun1();
?>
PHP實(shí)戰(zhàn)static(靜態(tài)關(guān)鍵字)
PHP實(shí)戰(zhàn)1.使用static可以修飾成員屬性和成員方法,不能修飾類
PHP實(shí)戰(zhàn)2.用static修飾的成員屬性,可以被同一個(gè)類的所有對(duì)象共享
PHP實(shí)戰(zhàn)3.靜態(tài)的數(shù)據(jù)是存在內(nèi)存中的數(shù)據(jù)段中(初始化靜態(tài)段)
PHP實(shí)戰(zhàn)4.靜態(tài)的數(shù)據(jù)是在類被第一次加載時(shí)分配到內(nèi)存中的,以后再用到類時(shí)就直接從數(shù)據(jù)段中獲取
PHP實(shí)戰(zhàn)5.什么是類被加載?只要在程序中使用到這個(gè)類(有這個(gè)類名出現(xiàn))
PHP實(shí)戰(zhàn)6.靜態(tài)方法(static修飾的方法),不能訪問(wèn)非靜態(tài)的成員(在非靜態(tài)方法中可以訪問(wèn)靜態(tài)成員)
PHP實(shí)戰(zhàn)因?yàn)榉庆o態(tài)的成員,就必須用對(duì)象來(lái)訪問(wèn),訪問(wèn)內(nèi)部成員使用的就是$this,而靜態(tài)方法不用使用對(duì)象調(diào)用,也就沒(méi)有對(duì)象,$this也就不能代表對(duì)象,非靜態(tài)的成員還必須使用對(duì)象
PHP實(shí)戰(zhàn)如果你確定一個(gè)方法中不使用非靜態(tài)成員,則可以將這個(gè)方法聲明為即靜態(tài)方法
PHP實(shí)戰(zhàn)注意:靜態(tài)的成員都要使用類名去訪問(wèn),不要?jiǎng)?chuàng)建對(duì)象,不用對(duì)象訪問(wèn)
PHP實(shí)戰(zhàn)類名::靜態(tài)成員
PHP實(shí)戰(zhàn)如果在類中使用靜態(tài)成員,可以使用self代表本類
PHP實(shí)戰(zhàn)const
PHP實(shí)戰(zhàn)1.它只能修飾成員屬性
PHP實(shí)戰(zhàn)2.類中聲明常量屬性使用const
PHP實(shí)戰(zhàn)3.訪問(wèn)方式和static靜態(tài)成員屬性一樣(在類外部使用? 類名::常量?? 在類內(nèi)部使用 self::常量)
PHP實(shí)戰(zhàn)4.常量一定要在聲明的時(shí)候就給初值
PHP實(shí)戰(zhàn)
<?php
//定義一個(gè)類“人們”
class Person{
protected $name;
protected $age;
protected $sex;
static $country="中國(guó)";
//聲明一個(gè)常量
const RUN="走";
//構(gòu)造方法
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function getCountry(){
//如果在類中使用靜態(tài)成員,可以使用self代表本類
return self::$country;
}
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
}
protected function eat(){
echo "吃飯!<br>";
}
function run(){
//在類的內(nèi)部使用常量 self::常量
echo self::RUN."<br>";
}
//聲明靜態(tài)的方法
static function hello(){
echo "你好<br>";
}
}
PHP實(shí)戰(zhàn)PHP面向?qū)ο笾谐S玫哪g(shù)方法
PHP實(shí)戰(zhàn)__call()
PHP實(shí)戰(zhàn)作用:調(diào)用對(duì)象中不存在的方法時(shí),就會(huì)出現(xiàn)系統(tǒng)報(bào)錯(cuò),然后程序退出.
PHP實(shí)戰(zhàn)什么時(shí)候自動(dòng)調(diào)用:就會(huì)在調(diào)用一個(gè)對(duì)象中不存在的方法時(shí)就會(huì)自動(dòng)調(diào)用
PHP實(shí)戰(zhàn)處理一些不存在的錯(cuò)誤調(diào)用
PHP實(shí)戰(zhàn)這個(gè)方法需要兩個(gè)參數(shù)
PHP實(shí)戰(zhàn)
<?php
//定義一個(gè)類“人們”
class Person{
protected $name;
protected $age;
protected $sex;
static $country="中國(guó)";
//聲明一個(gè)常量
const RUN="走";
//構(gòu)造方法
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function getCountry(){
//如果在類中使用靜態(tài)成員,可以使用self代表本類
return self::$country;
}
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
}
protected function eat(){
echo "吃飯!<br>";
}
function run(){
//在類的內(nèi)部使用常量 self::常量
echo self::RUN."<br>";
}
//處理一些不存在的錯(cuò)誤調(diào)用
//就會(huì)在調(diào)用一個(gè)對(duì)象中不存在的方法時(shí)就會(huì)自動(dòng)調(diào)用
function __call($methodName,$args){
//$methodName調(diào)用不存在方法的方法名 $args里面的參數(shù)
echo "你調(diào)用的方法{$methodName}(參數(shù):";
print_r($args);
echo ")不存在<br>";
}
//聲明靜態(tài)的方法
static function hello(){
echo "你好<br>";
}
}
$p=new Person("張三",20,"女");
$p->test(10,20,30);
$p->demo("aa","bb");
$p->say();
?>
PHP實(shí)戰(zhàn)__toString()
PHP實(shí)戰(zhàn)直接輸出對(duì)象引用的時(shí)候自動(dòng)調(diào)用,用來(lái)快速獲取字符串表示的最快捷的方法
PHP實(shí)戰(zhàn)
<?php
//定義一個(gè)類“人們”
class Person{
protected $name;
protected $age;
protected $sex;
static $country="中國(guó)";
//聲明一個(gè)常量
const RUN="走";
//構(gòu)造方法
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
}
function __toString(){
return self::$country."<br>{$this->name}<br>{$this->age}<br>{$this->sex}<br>".self::RUN;
}
}
$p=new Person("張三",21,"女");
echo $p;
?>
PHP實(shí)戰(zhàn)__clone()
PHP實(shí)戰(zhàn)克隆對(duì)象使用clone()處理
PHP實(shí)戰(zhàn)原本(原來(lái)的對(duì)象)
PHP實(shí)戰(zhàn)復(fù)本(復(fù)制出來(lái)的對(duì)象)
PHP實(shí)戰(zhàn)__clone()就是在克隆對(duì)象時(shí)自動(dòng)調(diào)用的方法
PHP實(shí)戰(zhàn)只要一個(gè)對(duì)象一創(chuàng)建,就要有初始化的動(dòng)作,和構(gòu)造方法__constuct作用相似
PHP實(shí)戰(zhàn)在__clone()方法中的$this關(guān)鍵字代表的是復(fù)本的對(duì)象,$that代表原本對(duì)象
PHP實(shí)戰(zhàn)
<?php
//定義一個(gè)類“人們”
class Person{
var $name;
protected $age;
protected $sex;
static $country="中國(guó)";
//聲明一個(gè)常量
const RUN="走";
//構(gòu)造方法
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
}
function __clone(){
$this->name="王五";
$this->age=18;
$this->sex="男";
}
function __destruct(){
echo $this->name."<br>";
}
}
$p=new Person("張三",21,"女");
$p->say();
//這并不能叫做克隆對(duì)象,因?yàn)樵谖鰳?gòu)時(shí)只析構(gòu)一次
/*$p1=$p;
$p1->name="李四";
$p1->say();*/
$p1= clone $p;
$p1->say();
?>
PHP實(shí)戰(zhàn)__autoload()
PHP實(shí)戰(zhàn)注意:其它的魔術(shù)方法都是在類中添加起作用,這是唯一一個(gè)不在類中添加的方法
PHP實(shí)戰(zhàn)只要在頁(yè)面中使用到一個(gè)類,只要用到類名,就會(huì)自動(dòng)將這個(gè)類名傳給這個(gè)參數(shù)
PHP實(shí)戰(zhàn)
<?php
function __autoload($className){
include "./test/".$className.".class.php";
}
$o=new One;
$o->fun1();
$t=new Two;
$t->fun2();
$h=new Three;
$h->fun3();
?>
PHP實(shí)戰(zhàn)test里的文件
PHP實(shí)戰(zhàn)one.class.php
PHP實(shí)戰(zhàn)
<?php
class One{
function fun1(){
echo "The Class One<br>";
}
}
?>
PHP實(shí)戰(zhàn)two.class.php
PHP實(shí)戰(zhàn)
<?php
class Two{
function fun2(){
echo "The Class Two<br>";
}
}
?>
PHP實(shí)戰(zhàn)three.class.php
PHP實(shí)戰(zhàn)
<?php
class Three{
function fun3(){
echo "The Class Three<br>";
}
}
?>
PHP實(shí)戰(zhàn)對(duì)象串行化(序列化):將一個(gè)對(duì)象轉(zhuǎn)為二進(jìn)制串(對(duì)象是存儲(chǔ)在內(nèi)存中的,容易釋放)
PHP實(shí)戰(zhàn)使用時(shí)間:
PHP實(shí)戰(zhàn)1.將對(duì)象長(zhǎng)時(shí)間存儲(chǔ)在數(shù)據(jù)庫(kù)或文件中時(shí)
PHP實(shí)戰(zhàn)2.將對(duì)象在多個(gè)PHP文件中傳輸時(shí)
PHP實(shí)戰(zhàn)serialize();??? 參數(shù)是一個(gè)對(duì)象,返回來(lái)的就是串行化后的二進(jìn)制串
PHP實(shí)戰(zhàn)unserialize();? 參數(shù)就是對(duì)象的二進(jìn)制串,返回來(lái)的就是新生成的對(duì)象
PHP實(shí)戰(zhàn)__sleep()
PHP實(shí)戰(zhàn)是在序列化時(shí)調(diào)用的方法
PHP實(shí)戰(zhàn)作用:就是可以將一個(gè)對(duì)象部分串行化
PHP實(shí)戰(zhàn)只要這個(gè)方法中返回一個(gè)數(shù)組,數(shù)組中有幾個(gè)成員屬性就序列化幾個(gè)成員屬性,如果不加這個(gè)方法,則所有成員都被序列化
PHP實(shí)戰(zhàn)__wakeup()
PHP實(shí)戰(zhàn)是在反序列化時(shí)調(diào)用的方法
PHP實(shí)戰(zhàn)也是對(duì)象重新誕生的過(guò)程
PHP實(shí)戰(zhàn)
<?php
//定義一個(gè)類“人們”
class Person{
var $name;
protected $age;
protected $sex;
static $country="中國(guó)";
//聲明一個(gè)常量
const RUN="走";
//構(gòu)造方法
function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
function say(){
echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}.<br>";
}
function __clone(){
$this->name="王五";
$this->age=18;
$this->sex="男";
}
//是在序列化時(shí)調(diào)用的方法,可以部分串行化對(duì)象
function __sleep(){
return array("name","age");
}
//是在反序列化時(shí)調(diào)用的方法,也是對(duì)象重新誕生的過(guò)程.可以改變里面的值
function __wakeup(){
$this->name="sanzhang";
$this->age=$this->age+1;
}
function __destruct(){
}
}
?>
PHP實(shí)戰(zhàn)read.php
PHP實(shí)戰(zhàn)
<?php
require "11.php";
$str=file_get_contents("mess.txt");
$p=unserialize($str);
echo $p->say();
?>
PHP實(shí)戰(zhàn)write.php
PHP實(shí)戰(zhàn)
<?php
require "11.php";
$p=new Person("張三",18,"男");
$str=serialize($p);
file_put_contents("mess.txt",$str);
?>
PHP實(shí)戰(zhàn)以上這篇詳談PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持維易PHP.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1895.html