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