1. 程式人生 > >2018-3-5 面向對象

2018-3-5 面向對象

結果 stat 學習 turn clas 數據 on() 函數 靜態屬性

今天學習了有關“面向對象”的內容:

傳統的面向對象:把將要完成的工作,一個步驟一個步驟的實現,最終完成目標。

現代的面向對象:把要做的事情提前存起來,等到需要用的時候調用,相當於設計方法和方法的調用。

面向對象主要是設計思想上的極大提升。面向過程是解決簡單問題的自然的思維過程,面向對象是解決大規模的復雜問題的良好思想。

面向對象的基本概念:

類:表示一個群體。有“共同特征”,某一類事物的總稱。

對象:表示群體中的個體,萬事萬物皆為對象。

1、定義類:

定義類的語法中,包括定義屬性、定義方法、定義常量三種。

2、創建類的對象:

3、使用對象:

//定義類
class
c1{ var $name
="匿名"; var $sex="未知"; var $age=18; function f1(){ echo "函數f1被調用!"; } const pi=3.14; }
//創建類的對象
$person1=new c1(); $person2=new c1(); $person1->name="張三"; $person1->sex="男"; $str1=$person1->name; echo "{$str1}的性別為:".$person1->sex."<br />"; $person1->f1();

創建對象的基本形式:

①$對象名1=new 類名();

②可變類名:

$CName="C1";
$person3=new $CName();   //可變類(名)

③$對象名3 = new self;     //self指代類本身,這行代碼只能在類內部方法中使用。

④通過對象創建對象

$person4=new $person3;    //通過對象創建該類的新對象

對象的傳值:

php中,傳值方式有值傳遞和引用傳遞。

值傳遞:拷貝數據本身。傳遞結束,有兩份數據,但兩變量“相互獨立”。

引用傳遞:傳遞結束,數據只有一份,兩個變量同時指向該數據。

面向對象:默認值傳遞,可以引用傳遞。

class p{
    var
$v1=10; } $p1=new p(); $p2=$p1->v1; $p1->v1=20; var_dump($p1); var_dump($p2);

輸出結果為:$p1=20

      $p2=10

class p{
    var $v1=10;
}
$p1=new p();
$p2=$p1;  //傳的是v1,不是v1的值
$p1->v1=20;
var_dump($p1);
var_dump($p2);

輸出結果為:$p1=20

      $p2=20

class p{
    var $v1=10;
}
$p1=new p();
$p2=&$p1->v1;
$p1->v1=20;
var_dump($p1);
var_dump($p2);

輸出結果為:$p1=20

      $p2=20

面向對象的方法:

例:

//斜邊
class person{
    var $x=1;
    var $y=1;
    var $pi=1;
    function getxiebian($a,$b){
        $s1=$a*$a+$b*$b;
        $s2=pow($s1,0.5);
        return $s2;
    }
}
$p1=new person();
$xie1=$p1->getxiebian(3,4);
echo "<br />斜邊1=$xie1";

$this關鍵字:

$this是一個“偽對象”,代表當前所屬類的當前對象。

//類與對象的創建   “自我介紹”
class Person{
    public $name="匿名";
    public $age=28;
    public $PI=3.14;
    function intro(){
        echo"<b/>hi,大家好,我叫".$this->name;
        echo",今年".$this->age."歲<br/>";
    }
}
$p1=new Person();
$p1->name="張三";
$p1->age=20;
$p1->intro();
$p2=new Person();
$p2->name="李四";
$p2->age=22;
$p2->intro();

一個系統函數:get_class(對象) 

作用:獲得某個對象的“所屬類名”——結果只是一個類名字符串。

$class_name = get_class($p1);   //結果是:”Person”

靜態屬性

定義:只隸屬於類本身——也可以看做是所有對象的“共有數據”。

使用:

//靜態屬性
class C1{
    static $v1=10;    //靜態屬性
}
C1::$v1=100;    //修改靜態屬性的值
$s1=C1::$v1;    //取得靜態屬性的值
echo "s1=$s1";
$c1=new C1();
$c2=new c1();
echo "<br/>c1的中的靜態屬性v1=".$c1::$v1;
$c1::$v1=1000;    //通過$c1修改了靜態屬性值
echo "<br/>c2的中的靜態屬性v1=".$c2::$v1;

靜態方法

方法的前面加上static關鍵字修飾,就變成了靜態方法。

靜態方法同樣隸屬於類,而不是隸屬於具體對象。使用方法跟靜態屬性類似:

類名::靜態方法名();

靜態方法是只隸屬於類,而為所有對象所“共有”。

註意1:$this在靜態方法中不能使用。

self:代表當前類。

class S2{
    public $v1=1;
    static function getNew(){
        return new self;    //self代表"當前類"
    }                        //new self代表當前類的一個對象
}
echo"<hr />";
$obj2=S2::getNew();        //t通過S2的靜態方法得到該類的一個新對象
var_dump($obj2);

構造方法和析構方法:

構造方法是“創建”對象的時候會自動調用。

析構方法是“銷毀”對象的時候會自動調用。

class student{
    public $name="匿名";
    public $sex="未知";
    static $age=18;
    const food="饅頭";
    function intro(){
        echo"<b/>hi,大家好,我叫".$this->name;
        echo",我是".$this->sex."生<br/>";
        echo ",我愛吃".self::food."。<br>";
    }
    function __construct($n,$s){  //構造方法
        $this->name=$n;
        $this->sex=$s;
    }
    function __destruct(){  //析構方法
        echo"<br/>被銷毀了";
    }
}
echo"<hr/>";
$student1=new student(‘劉能‘,‘男‘);
$student1->intro();
$student2=new student(‘趙四‘,‘男‘);
$student2->intro();
echo"<hr/>";

2018-3-5 面向對象