博客列表 >11月26日_类与对象基础(创建类、实例化、命名空间、类成员、类方法)

11月26日_类与对象基础(创建类、实例化、命名空间、类成员、类方法)

fkkf467
fkkf467原创
2019年11月27日 16:50:49706浏览

一、创建类

类: 是生成对象的代码模板

  1. <?php
  2. // 定义一个学生类
  3. class Student {
  4. }
  5. ?>

二、成员方法

类中的函数被称为成员方法

  1. <?php
  2. // 定义一个学生类
  3. class Student {
  4. // 声明一个成员方法
  5. function dastudent($name,$age){
  6. echo '姓名:' . $name . ';' . '年龄:' . $age . ';';
  7. }
  8. }
  9. ?>

三、实例化

实例化是通过关键字new来声明一个对象
调用方法格式:对象名 -> 成员方法

  1. <?php
  2. // 定义一个学生类
  3. class Student {
  4. // 声明一个成员方法
  5. function dastudent($name,$age){
  6. echo '姓名:' . $name . ';' . '年龄:' . $age . ';';
  7. }
  8. }
  9. // 类的实例化
  10. $a = new Student();
  11. $b = new Student();
  12. $c = new Student();
  13. //3个对象都是Student类的实例,有不同的#id
  14. var_dump($a);
  15. echo '<br>';
  16. var_dump($b);
  17. echo '<br>';
  18. var_dump($c);
  19. echo '<br>';
  20. // 检测对象是否是同一个类的实例
  21. var_dump($a instanceof Student);
  22. echo '<br>';
  23. // 3个对象虽是同一个类的实例,但彼此并不相等,是完全独立的
  24. var_dump($a == $b);
  25. echo '<br>';
  26. var_dump($b === $c);
  27. echo '<br>';
  28. $a->dastudent('小明',12);
  29. ?>

四、类成员

类中的变量也称为成员变量
在类中声明属性变量时,需要通过访问限定符,设置它的作用域
属性: 初始化必须使用常数,不得使用表达式

  • public 是访问限制符,可视为属性作用域(可见性)
  • public 是指该属性不论是类内,类外,子类都是可访问的
  • 访问限定符还有protected,private

定义成员变量的格式为:关键字 成员变量名
访问成员变量的格式为:对象名 -> 成员变量

  1. <?php
  2. class Phone{
  3. public $brand = '小米';
  4. public $money = 1999;
  5. }
  6. $mi = new Phone();
  7. echo '品牌为:' . $mi->brand . ',价格为:' . $mi->money . '<hr>';
  8. // 动态对象属性
  9. $mi->size = 5.5;
  10. echo '尺寸为:' . $mi->size . '<hr>';
  11. // get_class_vars()返回类中public属性的属性组成的数组
  12. echo '<pre>' . print_r(get_class_vars(Phone::class),true);
  13. ?>

五、对象属性和对象方法练习

self:当前类
$this:当前类实例对象的引用

  1. <?php
  2. class Student{
  3. public $name = '猪小明';
  4. public $sex = '男';
  5. public $age = 12;
  6. public $classes = '五年级';
  7. public function getInfo1(){
  8. $s1 = new self();
  9. return '姓名:' . $s1->name . ';性别:' . $s1->sex . ';年龄:' . $s1->age . ';年级:' . $s1->classes;
  10. }
  11. public function getInfo2(){
  12. return '姓名:' . $this->name . ';性别:' . $this->sex . ';年龄:' . $this->age . ';年级:' . $this->classes;
  13. }
  14. }
  15. $stu = new Student();
  16. echo $stu->getInfo1();
  17. echo '<hr>';
  18. echo $stu->getInfo2();
  19. // 查看类中定义的对象方法
  20. echo '<pre>' . print_r(get_class_methods(Student::class),true);
  21. ?>

六、构造方法与析构方法

  1. <?php
  2. class Phone {
  3. public $brand;
  4. public $size;
  5. public $money;
  6. // 构造方法
  7. public function __construct($brand,$size,$money) {
  8. $this->brand = $brand;
  9. $this->size = $size;
  10. $this->money = $money;
  11. }
  12. // 对象方法
  13. public function getInfo() {
  14. return '品牌为:' . $this->brand . ';尺寸为:' . $this->size . ';价格为:' . $this->money . '<hr>';
  15. }
  16. // 析构方法: 在对象被删除/清理时自动调用
  17. public function __destruct() {
  18. echo '对象已被删除';
  19. }
  20. }
  21. $p = new Phone('华为',6.3,2999);
  22. echo $p->getInfo();
  23. ?>

七、命名空间

  • 命名空间: 解决全局成员的命名冲突问题, 借鉴了文件目录的基本思想
  • 目录: 同一目录下不允许重名文件, 但不同目录下, 允许同名文件存在
  • 空间: 同一空间内不允许成员重名, 但不同空间内, 允许同名成员存在
  • 命名空间使用 “namespace” 关键字声明
  1. namespace test1;
  2. class Test
  3. {
  4. }
  5. namespace test2;
  6. class Test
  7. {
  8. }
  9. namespace test3;
  10. class Test
  11. {
  12. }
  1. // 使用大括号来声明命名空间
  2. namespace a {
  3. class Test
  4. {
  5. }
  6. }
  7. namespace b {
  8. class Test
  9. {
  10. }
  11. }
  12. // 表示匿名空间: 全局空间, 也是默认的空间,或叫根空间,用 \ 表示
  13. namespace {
  14. class Test
  15. {
  16. }
  17. }

测试命名空间

zuoye01.php

  1. <?php
  2. // 使用大括号来声明命名空间
  3. namespace a {
  4. class Test
  5. {
  6. public function getInfo(){
  7. echo '我是命名空间a';
  8. }
  9. }
  10. }
  11. namespace b {
  12. class Test
  13. {
  14. public function getInfo(){
  15. echo '我是命名空间b';
  16. }
  17. }
  18. }
  19. // 表示匿名空间: 全局空间, 也是默认的空间,或叫根空间,用 \ 表示
  20. namespace {
  21. class Test
  22. {
  23. public function getInfo(){
  24. echo '我是匿名空间';
  25. }
  26. }
  27. }
  28. ?>

test.php

  1. <?php
  2. include __DIR__ . '/zuoye01.php';
  3. $a = new \a\Test();
  4. $a->getInfo();
  5. echo '<br>';
  6. $b = new \b\Test();
  7. $b->getInfo();
  8. echo '<br>';
  9. $c = new Test();
  10. $c->getInfo();



八、总结

学会了创建类,通过类实例化对象,类成员和类方法的声明与调用,学会使用了命名空间。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议