导航

2、PHP对象基础

2.1、编写第一个类

php class ShopProduct { //类体 }
2.2、第一个对象(或者两个)
  1. $product1 = new ShopProduct();
  2. $product2 = new ShopProduct();

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

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

2.3、类属性

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

php class ShopProduct { public $title = "default"; public $price = 10; public $firstName = "Super"; public $secondName = "U"; }
2.4、访问属性

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

php $product1 = new ShopProduct(); echo $product1->price;//这边输出 10
2.5、设置属性

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

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

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

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

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

2.6、函数(方法)使用

格式如下

  1. public function myMethod()
  2. {
  3. //...
  4. }

ShopProduct类 可以改成这样:

  1. class ShopProduct
  2. {
  3. public $title = "default";
  4. public $price = 10;
  5. public $firstName = "Super";
  6. public $secondName = "U";
  7. //注意类方法也可以声明成public\protected\private
  8. public function getFullName()
  9. {
  10. return $product1->firstName." ".$product1->secondName;
  11. }
  12. }

如何使用?

  1. $product1 = new ShopProduct();
  2. echo $product1->getFullName(); //输出super U,刚才的问题得到了解决。
2.7、构造函数

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

  1. $product2 = new ShopProduct();
  2. $product2->firstName = "Super2"
  3. $product2->secondName = "U2";
  4. echo $product2->getFullName();
  5. $product3 = new ShopProduct();
  6. $product3->firstName = "Super3"
  7. $product3->secondName = "U3";
  8. echo $product3->getFullName();

ok done.

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

  1. class ShopProduct
  2. {
  3. public $title = "default";
  4. public $price = 10;
  5. public $firstName = "Super";
  6. public $secondName = "U";
  7. function __construct($title, $price, $firstName, $secondName)
  8. {
  9. $this->title = $title;
  10. $this->price = $price;
  11. $this->firstName = $firstName;
  12. $this->secondName = $secondName;
  13. }
  14. public function getFullName()
  15. {
  16. return $product1->firstName." ".$product1->secondName;
  17. }
  18. }

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

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

  1. $product2 = new ShopProduct(‘default’,10,'Super2''U2');
  2. echo $product2->getFullName();
  3. $product3 = new ShopProduct(‘default’,10,'Super3','U3');
  4. 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、继承

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

例子:

  1. class ShopProduct
  2. {
  3. public $title = "default";
  4. public $price = 10;
  5. public $firstName = "Super";
  6. public $secondName = "U";
  7. public $playLength;
  8. function __construct($title, $price, $firstName, $secondName,$playLength)
  9. {
  10. $this->title = $title;
  11. $this->price = $price;
  12. $this->firstName = $firstName;
  13. $this->secondName = $secondName;
  14. $this->playLength = $playLength;
  15. }
  16. //注意类方法也可以声明成public\protected\private
  17. public function getFullName()
  18. {
  19. return $this->firstName." ".$this->secondName();
  20. }
  21. }
  1. Class CdProduct extends ShopProduct
  2. {
  3. function getplayLength()
  4. {
  5. return $this->playLength;
  6. }
  7. }

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