成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 詳談PHP面向對象中常用的關鍵字和魔術方法
全站頭部文字 我要出現在這里
詳談PHP面向對象中常用的關鍵字和魔術方法 720 2024-01-10   

PHP面向對象中常用的關鍵字

final

1.final不能修飾成員屬性(類中常量不是用這個關鍵字)

2.final只能修飾類和方法

作用:

使用final修飾的類不能被子類繼承

使用final修飾的方法不能被子類覆蓋

用來限制類不被繼承,方法不被覆蓋就使用final

<?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();
?>

static(靜態關鍵字)

1.使用static可以修飾成員屬性和成員方法,不能修飾類

2.用static修飾的成員屬性,可以被同一個類的所有對象共享

3.靜態的數據是存在內存中的數據段中(初始化靜態段)

4.靜態的數據是在類被第一次加載時分配到內存中的,以后再用到類時就直接從數據段中獲取

5.什么是類被加載?只要在程序中使用到這個類(有這個類名出現)

6.靜態方法(static修飾的方法),不能訪問非靜態的成員(在非靜態方法中可以訪問靜態成員)

因為非靜態的成員,就必須用對象來訪問,訪問內部成員使用的就是$this,而靜態方法不用使用對象調用,也就沒有對象,$this也就不能代表對象,非靜態的成員還必須使用對象

如果你確定一個方法中不使用非靜態成員,則可以將這個方法聲明為即靜態方法

注意:靜態的成員都要使用類名去訪問,不要創建對象,不用對象訪問

類名::靜態成員

如果在類中使用靜態成員,可以使用self代表本類

const

1.它只能修飾成員屬性

2.類中聲明常量屬性使用const

3.訪問方式和static靜態成員屬性一樣(在類外部使用 類名::常量 在類內部使用 self::常量)

4.常量一定要在聲明的時候就給初值

<?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面向對象中常用的魔術方法

__call()

作用:調用對象中不存在的方法時,就會出現系統報錯,然后程序退出。

什么時候自動調用:就會在調用一個對象中不存在的方法時就會自動調用

處理一些不存在的錯誤調用

這個方法需要兩個參數

<?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();
?>

__toString()

直接輸出對象引用的時候自動調用,用來快速獲取字符串表示的最快捷的方法

<?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;
?>

__clone()

克隆對象使用clone()處理

原本(原來的對象)

復本(復制出來的對象)

__clone()就是在克隆對象時自動調用的方法

只要一個對象一創建,就要有初始化的動作,和構造方法__constuct作用相似

在__clone()方法中的$this關鍵字代表的是復本的對象,$that代表原本對象

<?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();
?>

__autoload()

注意:其它的魔術方法都是在類中添加起作用,這是唯一一個不在類中添加的方法

只要在頁面中使用到一個類,只要用到類名,就會自動將這個類名傳給這個參數

<?php
function __autoload($className){
  include "./test/".$className.".class.php";
}

  $o=new One;
  $o->fun1();  

  $t=new Two;
  $t->fun2();

  $h=new Three;
  $h->fun3();

?>

test里的文件

one.class.php

<?php
class One{
  function fun1(){
    echo "The Class One<br>";
  }
}
?>

two.class.php

<?php
class Two{
  function fun2(){
    echo "The Class Two<br>";
  }
}
?>

three.class.php

<?php
class Three{
  function fun3(){
    echo "The Class Three<br>";
  }
}
?>

對象串行化(序列化):將一個對象轉為二進制串(對象是存儲在內存中的,容易釋放)

使用時間:

1.將對象長時間存儲在數據庫或文件中時

2.將對象在多個PHP文件中傳輸時

serialize(); 參數是一個對象,返回來的就是串行化后的二進制串

unserialize(); 參數就是對象的二進制串,返回來的就是新生成的對象

__sleep()

是在序列化時調用的方法

作用:就是可以將一個對象部分串行化

只要這個方法中返回一個數組,數組中有幾個成員屬性就序列化幾個成員屬性,如果不加這個方法,則所有成員都被序列化

__wakeup()

是在反序列化時調用的方法

也是對象重新誕生的過程

<?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(){

  }
}
?>

read.php

<?php
  require "11.php";
  
  $str=file_get_contents("mess.txt");
  $p=unserialize($str);

  echo $p->say();
?>

write.php

<?php
  require "11.php";

  $p=new Person("張三",18,"男");

  $str=serialize($p);

  file_put_contents("mess.txt",$str);
?>

以上這篇詳談PHP面向對象中常用的關鍵字和魔術方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持綠夏網。


PHP

主站蜘蛛池模板: angelawhite在线av| 爱妻者| 武汉日夜| 飞船奇遇记| 风间由美风间ゆみav| 人世间演员表| 宋学士濂文言文翻译| 艺术影院| 学生早餐吃什么方便又营养| 祈今朝剧情介绍| 张志忠演员| 阿尔法变频器说明书| 富坚真| 蜜桃成熟时免费视频| 上门女婿电视剧演员| 金珠玛米赞二胡曲简谱| 酱园弄 电影| nanny| 巴霍巴利王2国语版免费中文版| 我不再什么作文500字| 原千岁电影| freexxxmovies| 澳门风云2演员表| 一级片黄色毛片| 阴道电影| 理发店3| 德兰| 绿门背后| 母亲电影韩国完整版免费观看| 雪山飞狐 1991 孟飞| 狗叫声吸引狗| 维拉·法梅加| 新红楼梦电影| 亚洲1区| 我爱你再见演员表| 夜半2点钟| 杨子纯| 王宝强盲井| 许慧强| 韩国电影闵度允主演电影| 真的爱你最标准谐音歌词|

?。。≌鹃L長期在線接?。?!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103