程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 前端學PHP之面向對象系列第五篇——對象操作,面向對象第五篇

前端學PHP之面向對象系列第五篇——對象操作,面向對象第五篇

編輯:關於PHP編程

前端學PHP之面向對象系列第五篇——對象操作,面向對象第五篇


×
目錄
[1]對象克隆 [2]對象比較[3]對象串行化[4]json

前面的話

  本文主要介紹面向對象中的一些對象操作

 

對象克隆

  對象復制,又叫對象克隆,可以通過 clone 關鍵字來完成

  在多數情況下,我們並不需要完全復制一個對象來獲得其中屬性。但有一個情況下確實需要:如果你有一個窗口對象,該對象持有窗口相關的資源。你可能會想復制一個新的窗口,保持所有屬性與原來的窗口相同,但必須是一個新的對象(因為如果不是新的對象,那麼一個窗口中的改變就會影響到另一個窗口)。還有一種情況:如果對象 A 中保存著對象 B 的引用,當你復制對象A時,你想其中使用的對象不再是對象 B 而是 B 的一個副本,那麼你必須得到對象 A 的一個副本

<?php
    class Person{
        private $name;
        private $sex;
        private $age;
        function __construct($name="",$sex="",$age=1){
            $this->name= $name;
            $this->sex = $sex;
            $this->age = $age;
        }
        function say(){
            echo "我的名字:" .$this->name.",性別:".$this->sex.",年齡:".$this->age."<br>";
        }
    }
    $p1 = new Person('張三','男','20');
    $p2 = clone $p1;
    $p1->say();//我的名字:張三,性別:男,年齡:20
    $p2->say();//我的名字:張三,性別:男,年齡:20
?>

 

對象比較

  當使用比較運算符(==)比較兩個對象變量時,比較的原則是:如果兩個對象的屬性和屬性值都相等,而且兩個對象是同一個類的實例,那麼這兩個對象變量相等

  而如果使用全等運算符(===),這兩個對象變量一定要指向某個類的同一個實例(即同一個對象)

<?php
function bool2str($bool)
{
    if ($bool === false) {
        return 'FALSE';
    } else {
        return 'TRUE';
    }
}
function compareObjects(&$o1, &$o2)
{
    echo 'o1 == o2 : ' . bool2str($o1 == $o2) . "\n";
    echo 'o1 != o2 : ' . bool2str($o1 != $o2) . "\n";
    echo 'o1 === o2 : ' . bool2str($o1 === $o2) . "\n";
    echo 'o1 !== o2 : ' . bool2str($o1 !== $o2) . "\n";
}
class Flag
{
    public $flag;
    function Flag($flag = true) {
        $this->flag = $flag;
    }
}
class OtherFlag
{
    public $flag;
    function OtherFlag($flag = true) {
        $this->flag = $flag;
    }
}

$o = new Flag();
$p = new Flag();
$q = $o;
$r = new OtherFlag();
/*
Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
 */
echo "Two instances of the same class\n";
compareObjects($o, $p);
/*
Two references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
 */
echo "\nTwo references to the same instance\n";
compareObjects($o, $q);
/*
Instances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
 */
echo "\nInstances of two different classes\n";
compareObjects($o, $r);
?>

 

對象串行化

  對象是一種在內存中存儲的數據類型,它的壽命通常隨著生成該對象的程序終止而終止。有時候可能需要將對象的狀態保存下來,需要時再將對象恢復。對象通過寫出描述自己狀態的數值來記錄自己,這個過程稱對象的串行化(Serialization)。以下兩種情況需要將對象串行化:1、對象需要在網絡中傳輸時,將對象串行化成二進制串即可;2、對象需要持久保存時,將對象串行化後寫入文件或數據庫

serialize()

  serialize() -- 串行化,返回一個包含字節流的字符串

unserialize()

  unserialize() -- 反串行化,能夠重新把字符串變回php原來的對象值

  串行化一個對象將會保存對象的所有屬性變量和類名信息,但是不會保存對象的方法

<?php
// classa.inc:
  class A {
      public $one = 1;
      public function show_one() {
          echo $this->one;
      }
  }
  
// page1.php:
  include("classa.inc");
  $a = new A;
  $s = serialize($a);
  // 把變量$s保存起來以便文件page2.php能夠讀到
  file_put_contents('store', $s);

// page2.php:
  include("classa.inc");
  $s = file_get_contents('store');
  $a = unserialize($s);
  // 現在可以使用對象$a裡面的函數 show_one()
  $a->show_one();
?>

 

json

json_encode

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

  json_encode()方法對變量進行 JSON 編碼

<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);//{"a":1,"b":2,"c":3,"d":4,"e":5}
?>

json_decode

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

  json_decode()方法對 JSON 格式的字符串進行解碼,接受一個 JSON 編碼的字符串並且把它轉換為 PHP 變量,當assoc參數為 TRUE 時,將返回 array 而非 object

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
/*
object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
 */
var_dump(json_decode($json));

/*
array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
 */
var_dump(json_decode($json, true));
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved