Blogger Information
Blog 38
fans 1
comment 0
visits 28738
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
11月26日_类与对象基础(创建类、实例化、命名空间、类成员、类方法)
fkkf467
Original
707 people have browsed it

一、创建类

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

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



八、总结

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

Correcting teacher:查无此人查无此人

Correction status:qualified

Teacher's comments:完成的不错,继续加油。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments