博客列表 >类与对象基础

类与对象基础

王佳祥
王佳祥原创
2020年07月23日 15:33:36614浏览

类与对象基础

一、类的声明与实例化

  1. <?php
  2. //类的声明与实例化
  3. //1.类的声明
  4. class Demo1{
  5. //类成员:类属性,类常量,类方法
  6. public $name = '王佳祥';
  7. //类的实例构造方法/器
  8. public function __construct()
  9. {
  10. }
  11. }
  12. //2.类的实例化:就是创建对象的过程
  13. //类中的构造方法必须用:new 来调用
  14. $demo = new Demo1();
  15. var_dump($demo);
  16. //实例与对象,在不引起误会的场景下,可以通用
  17. echo '<hr>';
  18. //动态类,将类名称放到一个变量中
  19. $className = 'Demo1';
  20. $obj = new $className;
  21. echo get_class($obj);


二、类的属性和方法

  1. <?php
  2. //类中成员:类属性,类方法
  3. class Demo2{
  4. //类的属性
  5. //公共成员:在类的内部和外部都可以访问,都可见
  6. public $name = '闷油瓶';
  7. public $options = ['七星鲁王','怒海潜沙','云顶天宫'];
  8. //heredoc,nowdoc都支持
  9. public $table = <<<HEREDOC
  10. <table border="1" cellspacing="0" cellpadding="10px">
  11. <tr>
  12. <td>id</td>
  13. <td>name</td>
  14. <td>age</td>
  15. </tr>
  16. <tr>
  17. <td>1001</td>
  18. <td>张起灵</td>
  19. <td>100</td>
  20. </tr>
  21. <tr>
  22. <td>1002</td>
  23. <td>吴邪</td>
  24. <td>30</td>
  25. </tr>
  26. </table>
  27. HEREDOC;
  28. //静态属性:如果这个属性仅使用一次,可以不创建类实例,而直接通过类来调用
  29. public static $color = '红色';
  30. //抽象属性,没有被初始化的属性,默认为null
  31. public $sex;
  32. }
  33. //类的实例化
  34. $demo2 = new Demo2;
  35. //类中的成员属性的访问
  36. echo $demo2->name;
  37. echo $demo2->table;
  38. //访问静态成员使用双冒号:范围解析符
  39. echo Demo2::$color;
  40. var_dump($demo2->sex);


  1. <?php
  2. //类中的方法
  3. class Demo3
  4. {
  5. //类属性 public :访问限定符,用来声明类成员的作用域
  6. public $name = '吴邪';
  7. public $age = 30;
  8. public static $color = 'red';
  9. //类方法
  10. public function write1(){
  11. //访问类属性
  12. $user = new Demo3;
  13. //访问类成员
  14. return "姓名:{$user->name},年龄:{$user->age}";
  15. }
  16. public function write2(){
  17. //声明一个变量,声明在方法中的变量,不是属性,是私有变量/局部变量
  18. $sex = '男';
  19. //访问类属性 self:类引用
  20. //$user = new self; $this 会自动创建,$this是只读的,不能被更新
  21. //访问类成员 $this:类实例引用
  22. return "姓名:{$this->name},年龄:{$this->age}";
  23. }
  24. //类方法中访问类外部成员:变量函数
  25. public function write3()
  26. {
  27. //调用外部函数
  28. $str = hello();
  29. //外部变量
  30. return $str . $GLOBALS['username'];
  31. }
  32. //实际项目中,外部成员应该通过方法参数注入到方法,而不是在方法中直接调用
  33. public function write4(Closure $hello,string $username)
  34. {
  35. return $hello() . $username;
  36. }
  37. //静态方法:不依赖类实例,可以用类直接调用
  38. public static function write5()
  39. {
  40. //静态成员属于类,不属于类实例,所以不能使用类实例的引用$this
  41. return "颜色:" . self::$color;
  42. }
  43. }
  44. //客户端代码
  45. $user = new Demo3;
  46. echo $user->write1().'<br>';
  47. echo $user->write2().'<br>';
  48. //外部函数
  49. function hello(){
  50. return 'hello';
  51. }
  52. $hello = function()
  53. {
  54. return 'Hello';
  55. };
  56. $username = '张起灵';
  57. echo $user->write3().'<br>';
  58. echo $user->write4($hello,$username).'<br>';
  59. echo $user->write5().'<br>';


三、类的访问与扩展

  • 访问操作符,public(公共的),private(私有的),protected(受保护的)
  1. <?php
  2. //类成员的访问控制
  3. class Demo4
  4. {
  5. //public:公共成员,默认值,新版本不能省略
  6. public $name = '王胖子';
  7. //private:私有成员,只能在本类中使用
  8. private $age = 40;
  9. //protected:受保护的,只可以在子类和本类中使用,外部不能用
  10. protected $job = '卖古玩';
  11. public function write()
  12. {
  13. return "姓名:{$this->name},年龄:{$this->age},工作:{$this->job}";
  14. }
  15. }
  16. //子类
  17. class Demo4_1 extends Demo4
  18. {
  19. public function write()
  20. {
  21. return "姓名:{$this->name},年龄:{$this->age},工作:{$this->job}";
  22. }
  23. }
  24. //类外部
  25. $user = new Demo4;
  26. echo $user -> name;
  27. echo '<hr>';
  28. echo $user->write();
  29. echo '<hr>';
  30. //调用子类访问
  31. echo (new Demo4_1)->write();


  • 类的扩展,属性和方法重写
  1. <?php
  2. //类的继承/扩展
  3. //变量就是数据复用,函数是代码复用,继承就是类的复用
  4. //final:类前加禁止类扩展
  5. class Demo5
  6. {
  7. //属性
  8. protected $name = '黑瞎子';
  9. //方法
  10. // final:方法禁止重写
  11. public function write()
  12. {
  13. return "姓名:{$this->name}";
  14. }
  15. }
  16. //扩展类
  17. class Rob extends Demo5
  18. {
  19. //1.扩展
  20. //属性扩展
  21. protected $age = 40;
  22. //方法扩展
  23. public function write()
  24. {
  25. return parent::write() . ",年龄:{$this->age}";
  26. //return "姓名:{$this->name},年龄:{$this->age}";
  27. }
  28. }
  29. $rob = new Rob;
  30. echo $rob->write();


四、学习总结

1.类用class来声明,class 类名(){…}
2.用new来实例化类,new 类名
3.类的属性:静态属性(用static来声明)抽象属性(没有初始化的属性)
4.访问静态成员用双冒号
5.类的访问操作符public(公共的)private(私有的)protected(受保护的)
6.private只能在本类中访问,protected只能在子类和本类中访问
7.类的扩展用extends继承父类,属性扩展更新父类中已有的值,方法扩展在原有的方法中添加数据
8.final:可以禁止方法或者属性的扩展,也可以禁止整个类的扩展
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议