2、PHP对象基础

优质
小牛编辑
119浏览
2023-12-01

2.1、编写第一个类

class ShopProduct {
    //类体
}

2.2、第一个对象(或者两个)

$product1 = new ShopProduct();
$product2 = new ShopProduct();

new 操作符和作为他唯一操作数的类名一起被调用,并生成类的实例。 本例中$product1和$product2同一个类生成的相同类型的不同对象

关于类和对象关系 请移步点击观看视频

2.3、类属性

puclic(公开访问)、protected(仅子类、父类可以访问)、private(仅本类才能访问)

class ShopProduct
{
  public $title = "default";
  public $price = 10;
  public $firstName = "Super";
  public $secondName = "U";
}

2.4、访问属性

我们可以用->来访问属性变量,如下:

$product1 = new ShopProduct();
echo $product1->price;//这边输出 10

2.5、设置属性

因为属性被定义成public,所以我们可以给属性附值:

$product1->price = 20;
echo $product1->price;//这边输出 20

当我们要获取名字(full name):我们可以这样做:

echo $product1->firstName." ".$product1->secondName; //super U

太麻烦了实在。如果能让对象代替我们处理这件苦差事就好了。请看下面的使用方法。

2.6、函数(方法)使用

格式如下

public function myMethod()
{
//...
}

ShopProduct类 可以改成这样:

class ShopProduct
{
  public $title = "default";
  public $price = 10;
  public $firstName = "Super";
  public $secondName = "U";

  //注意类方法也可以声明成public\protected\private
  public function getFullName()
  {
     return  $product1->firstName." ".$product1->secondName; 
  }
}

如何使用?

$product1 = new ShopProduct();
echo $product1->getFullName();  //输出super U,刚才的问题得到了解决。

2.7、构造函数

小需求:现在要创建一个fullName分别为Super2 U2、Super3 U3的对象。并分别得到他的fullName值,我们可以这么做:

$product2 = new ShopProduct();
$product2->firstName = "Super2"
$product2->secondName = "U2";
echo $product2->getFullName();

$product3 = new ShopProduct();
$product3->firstName = "Super3"
$product3->secondName = "U3";
echo $product3->getFullName();

ok done.

有没有觉得太繁琐?有没有能自动调用的方法。答案是肯定的。引出我们的构造方法:

class ShopProduct
{
  public $title = "default";
  public $price = 10;
  public $firstName = "Super";
  public $secondName = "U";

  function __construct($title, $price, $firstName, $secondName)
  {
      $this->title = $title;
      $this->price = $price;
      $this->firstName = $firstName;
      $this->secondName = $secondName;
  }

  public function getFullName()
  {
     return  $product1->firstName." ".$product1->secondName; 
  }
}

注意关键词 __construct,他会在创建对象时候,自动去调用。

让我们try it.改造上面的小需求:

$product2 = new ShopProduct(‘default’,10,'Super2','U2');
echo $product2->getFullName();

$product3 = new ShopProduct(‘default’,10,'Super3','U3');
echo $product3->getFullName();

ok done.是不是简洁了很多。

2.8、基本类型和PHP类型检查函数

类型检查函数类型描述
is_bool()布尔型值为true或者false
is_integer()整型整数
is_double()双精度型浮点数
is_string()字符串字符数据
is_object()对象对象
is_array()数组数组
is_resource()资源用于识别和处理外部资源的(如数据库或文件)句柄
is_null()NULL未分配的值

2.9、继承

继承是从一个类得到一个或者多个类的机制。

例子:

class ShopProduct
{
  public $title = "default";
  public $price = 10;
  public $firstName = "Super";
  public $secondName = "U";
  public $playLength;

  function __construct($title, $price, $firstName, $secondName,$playLength)
  {
      $this->title = $title;
      $this->price = $price;
      $this->firstName = $firstName;
      $this->secondName = $secondName;
      $this->playLength = $playLength;
  }
  //注意类方法也可以声明成public\protected\private
  public function getFullName()
  {
     return  $this->firstName." ".$this->secondName(); 
  }
}
Class CdProduct extends ShopProduct
{
    function getplayLength()
    {
        return $this->playLength;
    }
}

这样CdProduct除继承父类ShopProduct所有特性外,还自己多了个getplayLength的方法