php-类

类是对对象抽象的一个描述。
不能被执行,不能使用。
类的实例化结果就是对象

<?php
//类的定义
  class Demo
  {
    //成员属性(成员变量)
    public $name ="zhangsan";

    //成员方法(函数)
    public function add()
    {
      echo "执行添加...\n";
    }
    public function show()
    {
      echo "执行浏览...\n";
    }
  }
  //类的实例化结果就是对象
  $d =new Demo();

  //使用(方法调用)
  $d->add();
  $d->show();

面向对象编程的特点:封装、继承、多态
类和对象的关系:

  • 类的实例化结果就是一个对象(类的)
  • 对对象的

类的定义

[修饰符] class 类名
{
【成员属性】 定义变量
【成员方法】 定义函数
}

常用属性修饰符:public、proteced、private、static、var

<?php
//定义一个stu学生类
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";
  }
}
  //对象实例化
  $stu=new $Stu();
  echo $stu->name."\n";
  echo $stu->age."\n";
<?php  
//构造方法和析构方法
calss stu
{
  public $name;
  public $age;

  //构造方法(固定),必填两个参数,$name,$age可设默认值
  public function __construct($name,$age)
  {
    $this->name=$name;
    $this->age=$age;
  }

  public function getInfo()
  {
    return $this->name.":".$this->age."\n";
  }
  //析构
  public function __destruct()
  {
    echo $this->name."对象被销毁\n";
  }
}
$s1=new Stu("李四",22);
$s2=nwe Stu("王五",23);

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

对象的封装

<?php
//类的封装
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;
  }
}
//测试
$s=new Stu();

$s->name="lisi";

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

继承

假如B类继承A类,那么久继承了A中所有非私有属性和方法(函数)。
其中A叫父类(基类),B叫子类(派生类)。
class B extends A
{

}

<?php  
//类的继承
calss $A
{
    public $name="aa";
    public function fun()
    {
      echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n";
    }
}

class B extends A
{
  //重写父类方法是为了升级,提升程序的可维护性
  public function fun()
  {
    echo "bbbbbbbbbbbbbbbbbbbbbb\n";
  }

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

final、static和const

  1. final关键字:主要使用修饰了类与成员方法(函数)。
    使用final关键字修饰类,表示这个类不可以有子类。
    使用final关键字修饰的方法,不可以在子类中被覆盖(重写)。
    目的:安全、没必要。

  2. static
    使用static修饰的方法和属性,不用实例化就可以使用。
    static修饰的方法中,不可以使用非静态内容($this)。
    在类中调用属性,使用self::属性名
    在类外调用属性,使用类名::属性名

<?php
  class $A
  {
    public static name="zhangsan";
    public static function aaa()
    {
      echo "aaaaaaaaaaaaaaaaa\n";
    }
  }
  //静态方法,不用实例化,使用类名加双冒号调用
  echo A::aaa();
  echo A::name;
  A::name="lsi";//修改静态属性
  1. const
    在类中修饰成员属性,将其定义成常量属性(不可修改)
    一般要求常量名都是大写的,没有"$"符,没有其他修饰符(public)
    定义格式:const 成员常用量="值";
    在类中调用属性,使用self::属性名
    在类外调用属性,使用类名::属性名
<?php  
class Game
{
  const UP =37;
  const RIGHT=38;
  const DOWN=39;
  const LEFT=40;
  public function move ($c)
  {
    switch($c)
    {
      case 37:echo "向上移动。。。\n";
      case 38:echo "向右移动。。。\n";
      case 39:echo "向下移动。。。\n";
      case 40:echo "向左移动。。。\n";
    }
  }  
}



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

4.检测当前对象是否是属性指定的类
instanceof 用于确定一个PHP变量是否属于某一类class的实例:
如果对象数据该类或该类是此对象的父类则返回 TRUE

类型约束

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

魔术方法

  • clone
__clone();//魔术方法  

当执行clone科隆时

  • __toString
    必须返回一个字符串
<?php
class A
{
  public $name= "zhangsan ";
  public function __toString()
  {
    return "name".$this->name."\n";
  }
}
  • __atuoload()
    当new实例化一个对象时,这个类若不存在,则自动调用此函数,并将类名存入参数可以使用这个实现类的自动加载。
<?php  
function __autoload($className)
{
  $fname=$calssName.".php";
  if(file_exists($fname))
  {
    require($fname);
  }
}

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

对象序列化(串行化)(在对象持久化存储和传输中使用)

抽象类

<?php
//抽象类
abstract class A
{
    public function fun1()
    {
        echo "fun1()....\n";
    }
    public function fun2()
    {
        echo "fun2().....\n";
    }
    //抽象方法,没有方法体
    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();
}
//没有完全实现C类,不能实现
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();

多态

对于同一个方法,传入不同对象,实现了不同的效果。
需要使用的技术:继承或实现,方法的覆盖。

命名空间

<?php
namespace aa;
function strlen($s)
{
    return 1000;
}
echo strlen("11")."\n";//调用当前空间下的函数
echo \strlen("adc")."\n";//调用根空间下的函数strlen()(系统函数)
echo \aa\strlen("123")."\n";//指定绝对路径找到当前空间下的函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容