亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP面向對象中常用的關鍵字和魔術方法的作用

發布時間:2021-09-03 21:58:36 來源:億速云 閱讀:123 作者:chen 欄目:開發技術

本篇內容介紹了“PHP面向對象中常用的關鍵字和魔術方法的作用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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面向對象中常用的關鍵字和魔術方法的作用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

桃园市| 徐闻县| 灵璧县| 辛集市| 余江县| 西平县| 福清市| 孟津县| 壶关县| 抚松县| 伊宁县| 浏阳市| 响水县| 宝鸡市| 闵行区| 嘉峪关市| 永定县| 红河县| 潞城市| 老河口市| 新民市| 兴山县| 乐亭县| 江山市| 崇阳县| 京山县| 咸丰县| 南岸区| 富民县| 兰州市| 兰西县| 进贤县| 镶黄旗| 郧西县| 樟树市| 乌拉特后旗| 莎车县| 宜宾县| 都昌县| 宁陕县| 龙南县|