php-類(lèi)

類(lèi)

類(lèi)是對(duì)對(duì)象抽象的一個(gè)描述。
不能被執(zhí)行,不能使用。
類(lèi)的實(shí)例化結(jié)果就是對(duì)象

<?php
//類(lèi)的定義
  class Demo
  {
    //成員屬性(成員變量)
    public $name ="zhangsan";

    //成員方法(函數(shù))
    public function add()
    {
      echo "執(zhí)行添加...\n";
    }
    public function show()
    {
      echo "執(zhí)行瀏覽...\n";
    }
  }
  //類(lèi)的實(shí)例化結(jié)果就是對(duì)象
  $d =new Demo();

  //使用(方法調(diào)用)
  $d->add();
  $d->show();

面向?qū)ο缶幊痰奶攸c(diǎn):封裝、繼承、多態(tài)
類(lèi)和對(duì)象的關(guān)系:

  • 類(lèi)的實(shí)例化結(jié)果就是一個(gè)對(duì)象(類(lèi)的)
  • 對(duì)對(duì)象的

類(lèi)的定義

[修飾符] class 類(lèi)名
{
【成員屬性】 定義變量
【成員方法】 定義函數(shù)
}

常用屬性修飾符:public、proteced、private、static、var

<?php
//定義一個(gè)stu學(xué)生類(lèi)
class Stu
{
  //定義屬性
  public $name ="zhangsan";
  public $age = 20;
  //定義成員
  public function say()
  {
    echo "hello world!";
  }
  public function test()
  {
    $this->say();
    echo $this->name.":".$this->age."\n";
  }
}
  //對(duì)象實(shí)例化
  $stu=new $Stu();
  echo $stu->name."\n";
  echo $stu->age."\n";
<?php  
//構(gòu)造方法和析構(gòu)方法
calss stu
{
  public $name;
  public $age;

  //構(gòu)造方法(固定),必填兩個(gè)參數(shù),$name,$age可設(shè)默認(rèn)值
  public function __construct($name,$age)
  {
    $this->name=$name;
    $this->age=$age;
  }

  public function getInfo()
  {
    return $this->name.":".$this->age."\n";
  }
  //析構(gòu)
  public function __destruct()
  {
    echo $this->name."對(duì)象被銷(xiāo)毀\n";
  }
}
$s1=new Stu("李四",22);
$s2=nwe Stu("王五",23);

echo $s1->getInfo();
echo $s2->getInfo();

對(duì)象的封裝

<?php
//類(lèi)的封裝
class Stu
{
  private $name="zhangsan";
  private $age=20;

  public function __set($param,$value)
  {
    this->$param=$value;
  }
  public function __get($param)
  {
    if($param=="age")
    {
      reture "保密";
    }
      return $this->param;
  }
}
//測(cè)試
$s=new Stu();

$s->name="lisi";

echo $s->name;
echo $s->age;

繼承

假如B類(lèi)繼承A類(lèi),那么久繼承了A中所有非私有屬性和方法(函數(shù))。
其中A叫父類(lèi)(基類(lèi)),B叫子類(lèi)(派生類(lèi))。
class B extends A
{

}

<?php  
//類(lèi)的繼承
calss $A
{
    public $name="aa";
    public function fun()
    {
      echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n";
    }
}

class B extends A
{
  //重寫(xiě)父類(lèi)方法是為了升級(jí),提升程序的可維護(hù)性
  public function fun()
  {
    echo "bbbbbbbbbbbbbbbbbbbbbb\n";
  }

  //提升可擴(kuò)展性
  public function fun2()
  {
     echo "cccccccccccccccc\n";
  }
}

final、static和const

  1. final關(guān)鍵字:主要使用修飾了類(lèi)與成員方法(函數(shù))。
    使用final關(guān)鍵字修飾類(lèi),表示這個(gè)類(lèi)不可以有子類(lèi)。
    使用final關(guān)鍵字修飾的方法,不可以在子類(lèi)中被覆蓋(重寫(xiě))。
    目的:安全、沒(méi)必要。

  2. static
    使用static修飾的方法和屬性,不用實(shí)例化就可以使用。
    static修飾的方法中,不可以使用非靜態(tài)內(nèi)容($this)。
    在類(lèi)中調(diào)用屬性,使用self::屬性名
    在類(lèi)外調(diào)用屬性,使用類(lèi)名::屬性名

<?php
  class $A
  {
    public static name="zhangsan";
    public static function aaa()
    {
      echo "aaaaaaaaaaaaaaaaa\n";
    }
  }
  //靜態(tài)方法,不用實(shí)例化,使用類(lèi)名加雙冒號(hào)調(diào)用
  echo A::aaa();
  echo A::name;
  A::name="lsi";//修改靜態(tài)屬性
  1. const
    在類(lèi)中修飾成員屬性,將其定義成常量屬性(不可修改)
    一般要求常量名都是大寫(xiě)的,沒(méi)有"$"符,沒(méi)有其他修飾符(public)
    定義格式:const 成員常用量="值";
    在類(lèi)中調(diào)用屬性,使用self::屬性名
    在類(lèi)外調(diào)用屬性,使用類(lèi)名::屬性名
<?php  
class Game
{
  const UP =37;
  const RIGHT=38;
  const DOWN=39;
  const LEFT=40;
  public function move ($c)
  {
    switch($c)
    {
      case 37:echo "向上移動(dòng)。。。\n";
      case 38:echo "向右移動(dòng)。。。\n";
      case 39:echo "向下移動(dòng)。。。\n";
      case 40:echo "向左移動(dòng)。。。\n";
    }
  }  
}



$g=new Game();
$g->move(37);
$g->move(Game::up);

4.檢測(cè)當(dāng)前對(duì)象是否是屬性指定的類(lèi)
instanceof 用于確定一個(gè)PHP變量是否屬于某一類(lèi)class的實(shí)例:
如果對(duì)象數(shù)據(jù)該類(lèi)或該類(lèi)是此對(duì)象的父類(lèi)則返回 TRUE

類(lèi)型約束

<?php
class A
{
  public function fun()
  {
    echo "aaaaaaaaaaaaaa\n";
  }
}
class B extends A
{
  public function fun()
  {
    echo "bbbbbbbbbbbbbbbbbbbbbbb\n";
  }
}
class Demo
{
  public function test(A $a)
  {
    $a->fun();
  }
}

$demo=new Demo();
$demo->test(new A());
$demo->test(new B);

魔術(shù)方法

  • clone
__clone();//魔術(shù)方法  

當(dāng)執(zhí)行clone科隆時(shí)

  • __toString
    必須返回一個(gè)字符串
<?php
class A
{
  public $name= "zhangsan ";
  public function __toString()
  {
    return "name".$this->name."\n";
  }
}
  • __atuoload()
    當(dāng)new實(shí)例化一個(gè)對(duì)象時(shí),這個(gè)類(lèi)若不存在,則自動(dòng)調(diào)用此函數(shù),并將類(lèi)名存入?yún)?shù)可以使用這個(gè)實(shí)現(xiàn)類(lèi)的自動(dòng)加載。
<?php  
function __autoload($className)
{
  $fname=$calssName.".php";
  if(file_exists($fname))
  {
    require($fname);
  }
}

$s= new Stu("wangwu",20);
echo $s."\n";

對(duì)象序列化(串行化)(在對(duì)象持久化存儲(chǔ)和傳輸中使用)

抽象類(lèi)

<?php
//抽象類(lèi)
abstract class A
{
    public function fun1()
    {
        echo "fun1()....\n";
    }
    public function fun2()
    {
        echo "fun2().....\n";
    }
    //抽象方法,沒(méi)有方法體
    public abstract function fun3();
}
class B extends A
{
    public function fun3()
    {
        echo "fun3()...\n";
    }
}
//接口
interface C
{
    public function fun4();
    public function fun5();
    public function fun6();
}
//沒(méi)有完全實(shí)現(xiàn)C類(lèi),不能實(shí)現(xiàn)
abstract class D extends implements C
{
    public function fun4()
    {
        echo "fun4()....\n";
    }
    public function fun5()
    {
        echo "fun5().....\n";
    }
}
class E extends D
{
    public function fun6()
    {
        echo "fun6()........\n";
    }
}



$b= new B();
$b->fun1();
$b->fun2();
$b->fun3();



$c=new C();
$c->fun4();
$c->fun5();
$C->fun6();

多態(tài)

對(duì)于同一個(gè)方法,傳入不同對(duì)象,實(shí)現(xiàn)了不同的效果。
需要使用的技術(shù):繼承或?qū)崿F(xiàn),方法的覆蓋。

命名空間

<?php
namespace aa;
function strlen($s)
{
    return 1000;
}
echo strlen("11")."\n";//調(diào)用當(dāng)前空間下的函數(shù)
echo \strlen("adc")."\n";//調(diào)用根空間下的函數(shù)strlen()(系統(tǒng)函數(shù))
echo \aa\strlen("123")."\n";//指定絕對(duì)路徑找到當(dāng)前空間下的函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,688評(píng)論 18 399
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    栗子雨閱讀 8,076評(píng)論 0 3
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    一粒沙隨風(fēng)飄搖閱讀 11,311評(píng)論 0 3
  • 再回眸 已是月照花林 陌上花開(kāi) 被歲月沉積成的思緒 音韻欲飛 一朝相逢 一夕花落 相聚的日子靜默成詩(shī) 往事如風(fēng) ...
    淡淡青蓮閱讀 273評(píng)論 0 3

友情鏈接更多精彩內(nèi)容