Blogger Information
Blog 17
fans 0
comment 0
visits 19016
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类与对象基础
嘬一口啊
Original
711 people have browsed it

类的声明和实例化对象

  • 声明类
  1. // class 类名 { }
  2. 例:
  3. class demo {
  4. }
  • 类中成员
  1. // 类成员:属性&方法
  2. 例:
  3. class demo {
  4. // 属性
  5. public $a = '这是类属性';
  6. // 方法
  7. public function test() {
  8. return '这是类方法';
  9. }
  10. }
  • 将类实例化得到对象
  1. 例:
  2. class demo {
  3. // 属性
  4. public $a = '这是类属性';
  5. // 方法
  6. public function test() {
  7. return '这是类方法';
  8. }
  9. }
  10. // 实例化对象:将实例化出的对象以一个变量来承接 = new 要实例化的类名();
  11. $demo = new demo();
  12. // instanceof用于确定一个 PHP 变量是否属于某一类 class 的实例是返回true否则返回false
  13. // 检测$demo变量名是否是属于demo类的实例化对象
  14. var_dump($demo instanceof demo);
  • 调用类中的属性和方法
  1. 例:
  2. class demo {
  3. // 属性
  4. public $a = '这是类属性';
  5. // 数组属性
  6. public $option = [1,2,3];
  7. // 方法
  8. public function test() {
  9. return '这是类方法';
  10. }
  11. }
  12. // 实例化类得到对象
  13. $demo = new demo();
  14. // 调用类中的属性
  15. // 对象名->属性名
  16. echo $demo->a; // 输出"这是类属性"
  17. // 访问调用类中的数组属性 // 根据索引来访问数组中的指定元素
  18. echo $demo->option[0]; // 输出 1;
  19. // 调用类中的方法
  20. // 对象名->方法名();
  21. echo $demo->test(); // 输出 "这是类方法"
  • 类方法中的构造方法

__construct() 构造方法:在本类实例化时自动调用

  1. 例:
  2. class demo {
  3. // 构造方法
  4. public function __construct {
  5. return '这是构造方法';
  6. }
  7. }
  8. // 类只要一实例化就自动调用构造方法
  9. $demo = new demo();
  10. // 打印输出对象
  11. var_dump($demo); // 输出 "这是构造方法";
  • 动态类:将类名设置为变量值
  1. 例:
  2. class demo {
  3. // 属性
  4. public $a = '这是类属性';
  5. // 方法
  6. public function test() {
  7. return '这是类方法';
  8. }
  9. }
  10. $className = 'demo'; // demo是上面的类名
  11. // 实例化对象
  12. $obj = new $className();
  13. // get_class(对象名); 返回对象所属类名
  14. echo get_class($obj);

类中的静态属性和静态方法的定义及访问

  • 静态属性和静态方法的定义

静态属性/静态方法:如果这个属性/方法仅使用一次,可以不创建类实例,而直接通过类来调用

  1. // 静态属性定义:static 属性名 = 属性值;
  2. // 静态方法定义:static 方法名(){}
  3. 例:
  4. class demo {
  5. //静态属性
  6. public static $a = '这是静态属性';
  7. // 静态方法
  8. public static $test() {
  9. return '这是静态方法';
  10. }
  11. }
  • 类中静态属性和静态方法的调用
  1. 例:
  2. class demo {
  3. //静态属性
  4. public static $a = '这是静态属性';
  5. // 静态方法
  6. public static $test() {
  7. return '这是静态方法';
  8. }
  9. }
  10. // 调用静态属性:当前类名::属性名;
  11. demo::$a;
  12. // 调用类中的静态方法:当前类名::方法名();
  13. demo::test();

类中的抽象属性

  1. 例:
  2. class demo {
  3. //定义抽象属性;抽象属性:没被初始化的属性, 默认赋NULL:
  4. public $salary;
  5. }
  6. // 实例化类
  7. $demo = new demo();
  8. // 检测抽象属性是否是一个空值
  9. var_dump(is_null($demo->salary));// 返回值true,

访问属性和方法

  • 本类中的方法中访问类的属性
  1. 例:
  2. class demo {
  3. // 定义属性
  4. public $name = '大娃';
  5. public $age = 100;
  6. // 定义方法
  7. public function test() {
  8. // 实例化当前类
  9. $demo = new demo();
  10. // 访问当前类中的类成员
  11. return "姓名:$demo->name,年龄:$demo->age";
  12. }
  13. }
  14. // 实例化对象
  15. $demo = new demo();
  16. // 调用类方法
  17. echo $demo->test(); // 输出 "姓名:大娃,年龄:100"
  • self和$this

解决类的名称被限定,使用self可以引用当前的类名称:self可以引用当前的类名称

$this会自动创建, $this是只读的,不能被更新 相当于:$this = new self;

类方法中声明的变量,不是属性是类方法的私有变量

  1. 例:
  2. class demo {
  3. // 定义属性
  4. public $name = '大娃';
  5. public $age = 100;
  6. // 定义方法
  7. public function test2() {
  8. // 声明一个变量, 声明在方法中的变量,不是属性,是私有变量/局部变量
  9. $salary = 8000;
  10. // 1.解决类的名称被限定,使用self可以引用当前的类名称
  11. $demo = new self; // 等同于 $demo = new demo();
  12. // 2.使用$this代替实例化出来的对象名称
  13. // $this会自动创建, $this是只读的,不能被更新 相当于:$this = new self;
  14. return "姓名:$this->name,年龄:$this->age,工资:$salary";
  15. }
  16. }
  17. // 实例化对象
  18. $demo = new demo();
  19. // 调用列中的test2方法
  20. echo $demo->test2(); // 输出 "姓名:大娃,年龄:100,工资:8000"
  • 类中的方法访问类外部的成员:变量和函数
  1. class demo {
  2. public function test3() {
  3. // 调用外部函数
  4. $str = hello();
  5. // 外部变量
  6. // 通过超全局数组访问外部变量
  7. return $str.$GLOBALS['username'];
  8. }
  9. }
  10. // 外部函数
  11. function hello(){
  12. return 'Hello ';
  13. }
  14. // 外部变量
  15. $username = '葫芦娃';
  16. // 实例化对象
  17. $demo = new demo();
  18. // 调用类中的test3方法
  19. echo $demo->test3(); // 输出 "hello葫芦娃"
  • 依赖注入:类中的方法访问类外部的成员:变量和函数
  1. 例:
  2. class demo {
  3. public function test4($hello,$username) {
  4. return $hello() . $username;
  5. }
  6. }
  7. // 外部函数传入类中的方法中的两种方法
  8. // 外部函数
  9. function hello()
  10. {
  11. return 'Hello ';
  12. }
  13. // 方法1:通过动态函数把函数传入类中的方法中
  14. $hello = 'hello';
  15. // 方法2:匿名函数[使用匿名函数把外部的函数传入类中方法中]
  16. $hello = function()
  17. {
  18. return 'Hello111';
  19. };
  20. // 外部变量
  21. $username = '葫芦娃';
  22. // 实例化对象
  23. $demo = new demo();
  24. //调用类中的test4方法
  25. echo $demo->test4($hello,$username); // 输出 "hell0葫芦娃"
  • 使用static声明静态方法:不依赖实例访问类的属性
  1. class demo {
  2. // 定义属性
  3. $nation = 'CHINA';
  4. // 声明方法
  5. public static function test5() {
  6. return "葫芦娃的国籍:".self::$nation;
  7. }
  8. }
  9. // 实例化对象
  10. $demo = new dmeo();
  11. // 调用类中的test5方法
  12. echo $demo->test5(); // 输出 "葫芦娃的国籍:CHINA"
  • 普通方法中可以访问静态成员
  1. 例:
  2. class demo {
  3. // 定义属性
  4. $nation = 'CHINA';
  5. // 声明方法
  6. public function test6() {
  7. return "国籍: " . self::$nation;
  8. }
  9. }
  10. // 实例化对象
  11. $demo = new dmeo();
  12. // 调用类中的test6方法
  13. echo $demo->test6(); // 输出 "国籍:CHINA"

类的继承

子类继承父类方法:class 子类名 extends 继承的父类名 { }

子类继承了父类可用父类中的除了private关键字定义的属性和方法

  1. 例:
  2. // 父类
  3. class demo {
  4. public function test {
  5. return "这是父类的方法";
  6. }
  7. }
  8. // 继承类
  9. class demo1 extends demo {
  10. }
  11. // 实例化子类调用继承父类中的方法
  12. $demo1 = new demo1();
  13. echo $demo1->test(); //输出 "这是父类方法"

类成员的访问控制[成员的作用域]

public[公共的]关键字的属性和方法:在类中和子类中及外部中使用

protected[受保护的]:类内部和子类中可以调用但类外部不可调用

private[私有的]:只可在类的内部中调用,不可再类的外部和子类中调用

  1. 例:
  2. class demo {
  3. // public 公共成员,类外部和内部及子类中均可调用
  4. public $name = '金刚葫芦娃';
  5. // private 受保护的 类内部和子类中可以调用但类外部不可调用
  6. protected $age = 30;
  7. // 私有的 只可在类的内部中调用,不可再类的外部和子类中调用
  8. private $wife = '金刚葫芦媳';
  9. // 类内部方位
  10. public function test() {
  11. return "姓名: {$this->name},年龄 : {$this->age}, 媳妇: {$this->wife}";
  12. }
  13. }
  14. // 实例化对象
  15. $dem0 new demo();
  16. // 调用test方法查看三种关键字是否能正常使用
  17. echo $demo->test(); // 输出 "姓名:金刚葫芦娃,年龄:30,媳妇:金刚葫芦媳" 都可以使用
  • 子类中调用三种关键字定义的属性
  1. 例:
  2. class demo {
  3. // public 公共成员,类外部和内部及子类中均可调用
  4. public $name = '金刚葫芦娃';
  5. // private 受保护的 类内部和子类中可以调用但类外部不可调用
  6. protected $age = 30;
  7. // 私有的 只可在类的内部中调用,不可再类的外部和子类中调用
  8. private $wife = '金刚葫芦媳';
  9. }
  10. }
  11. class demo1 extends demo {
  12. public function test() {
  13. // 子类中: 只有public 和 protected可见
  14. return "姓名: {$this->name}, 工资: {$this->age}";
  15. }
  16. }
  17. // 实例化对象
  18. $demo1 new demo1();
  19. echo $demo1->test(); // 输出 "姓名:金刚葫芦娃,年龄:30"
  • 类外部方位三种关键字定义的属性
  1. 例:
  2. class demo {
  3. // public 公共成员,类外部和内部及子类中均可调用
  4. public $name = '金刚葫芦娃';
  5. // private 受保护的 类内部和子类中可以调用但类外部不可调用
  6. protected $age = 30;
  7. // 私有的 只可在类的内部中调用,不可再类的外部和子类中调用
  8. private $wife = '金刚葫芦媳';
  9. }
  10. }
  11. // 实例化对象
  12. $demo1 new demo1();
  13. //调用public关键字的属性
  14. echo $demo->name; // 输出"金刚葫芦娃"
  15. // 调用protected关键字的属性
  16. echo $demo->age; // 输出直接报错,不能访问protectred关键字定义的属性
  17. // 调用private关键字的属性
  18. echo $demo->wife; // 输出直接报错,不能访问private关键字定义的属性

使用final关键字定义fianl类和fianl方法及final属性

  • fianl关键字定义fianl类

fianl类不能被继承

  1. // 定义fianl类:fianl class 类名 { }
  2. 例:
  3. fianl class demo {
  4. public funciton test() {
  5. return "final类中的方法";
  6. }
  7. }
  • final关键字定义fianl方法

fianl方法不能被子类重写

  1. 例:
  2. class demo {
  3. fianl public function test() {
  4. return "这是final方法";
  5. }
  6. }
  • final关键字定义fianl属性

final属性也不能被重写

  1. 例:
  2. class demo {
  3. final public $name = '二娃';
  4. }
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
Author's latest blog post