博客列表 >类与对象基础知识-7月21日作业

类与对象基础知识-7月21日作业

知行合一
知行合一原创
2020年08月21日 11:34:02629浏览

类的声明与实例化

命名规则

  1. 建议遵循PSR-2命名规范和PSR-4自动加载规范
  2. 类的命名采用驼峰法(首字母大写),例如 UserUserType
  3. 属性的命名使用驼峰法(首字母小写),例如 tableNameinstance
  4. 方法的命名使用驼峰法(首字母小写),例如 getUserName
  1. //1.类的声明
  2. class Goods{
  3. //类成员
  4. //1.类属性(可理解为变量)
  5. //2.类方法(可理解为函数)
  6. //类属性
  7. public $a="hello";
  8. //抽象属性(未赋值)
  9. public $b;
  10. //类的实例构造方法/器
  11. public function __construct()
  12. {
  13. }
  14. }
  15. //2.类的实例化,就是创建对象的对象
  16. //类的构造方法必须用:new来调用
  17. $goods=new Goods(); //如果不需要参数,可以写成new Goods;不带()
  18. var_dump($goods); //是一个对象
  19. echo "<br>";
  20. var_dump($goods instanceof Goods); //返回布尔值,看对象是否属于实例
  21. //实例和对象在不引起误会情况下,可以通用
  22. echo "<br>";
  23. //动态类
  24. $classname="Goods";
  25. $books= new $classname();
  26. echo get_class($books);//返回对象实例 obj 所属类的名字

类属性的访问

  1. class User{
  2. //公共成员,在类内部和类外部都可以访问,都可见。
  3. public $name="张三";
  4. public $points=[100,80,90];
  5. //静态属性,如果此属性只用一次,可以不创建类实例,直接通过类来调用
  6. public static $nation="CHINA";
  7. //抽象属性,没被初始化的属性
  8. public $a; //默认值是Null
  9. }
  10. //实例化一个对象
  11. $user=new User;
  12. //类中成员 属性的访问
  13. echo $user->name;
  14. echo "<br>";
  15. print_r($user->points);
  16. echo "<br>";
  17. echo $user->points[1];
  18. echo "<br>";
  19. //调用类静态属性 用::
  20. echo User::$nation;
  21. echo "<br>";
  22. var_dump($user->a);

类方法的访问

  1. //类中的方法
  2. class User{
  3. public $name="张三";
  4. Public $age="20";
  5. public static $nation="中国";
  6. public function write1(){
  7. $user=new User;
  8. return "名字是:{$user->name},年龄是{$user->age}";
  9. }
  10. public function write2(){
  11. $gongzi="8000";
  12. //self类引用 this类对象引用
  13. //$user=new self;
  14. //$this=new self; 会自动创建。 不能再重新创建。
  15. return "名字是:{$this->name},年龄是{$this->age},工资是{$gongzi}";
  16. }
  17. //类方法中访问类外部成员:变量和函数
  18. public function write3(){
  19. $str=hello();
  20. global $username;//声明一个外部变量。 不推荐这样用。应该用依赖注入
  21. return $str.$username;
  22. //或者用 return $str.$GLOBAL['username'];
  23. }
  24. //实际项目中,外部项目应该通过方法参数注入到方法中,而不是在方法中直接调用
  25. //依赖注入
  26. public function write4(Closure $hello2,string $username){
  27. return $hello2().$username;
  28. }
  29. //静态方法访问静态成员 不依赖实例,可以通过类直接调用
  30. public static function write5(){
  31. //静态成员属于类,不属于类实例,不能使用类实例的引用$this
  32. return "国籍是:".self::$nation;
  33. }
  34. //备注:普通方法也可以访问静态成员,但不建议用,以后可能被删除了。
  35. }
  36. $user=new User;
  37. echo "write1结果是:".$user->write1();
  38. echo "<hr>";
  39. echo "write2结果是:".$user->write2();
  40. function hello(){
  41. return "hello,world!";
  42. }
  43. $username="孤独求败";
  44. echo "<hr>";
  45. echo "write3结果是:".$user->write3();
  46. $hello2=function(){
  47. return "你好,哈哈!";
  48. };
  49. echo "<hr>";
  50. echo "write4结果是:".$user->write4($hello2,$username);
  51. echo "<hr>";
  52. echo "write5结果是:".$user->write5();

类成员的访问控制

  1. //类成员的访问控制
  2. class User{
  3. //公共成员,类外部,内部,子类都可访问
  4. public $name="张三";
  5. //private 私有成员只能在类内部访问。外部和子类访问不到
  6. private $age=20;
  7. //protected 受保护成员 外部访问不到,类内部和子类可用。
  8. protected $gongzi=8000;
  9. public function write(){
  10. return $this->name.$this->age.$this->gongzi;
  11. }
  12. }
  13. //子类
  14. class Rob extends User{
  15. public function write(){
  16. return $this->name.$this->age.$this->gongzi;
  17. }
  18. }
  19. //类外部
  20. $user=new User;
  21. echo "类外部访问: ".$user->name;
  22. echo "<hr>";
  23. echo "类内部访问: ".$user->write();
  24. echo "<hr>";
  25. $rob=new Rob;
  26. echo "子类访问: ".$rob->write();
  27. //用下面的也可
  28. //echo "子类访问: ".(new Rob)->write();

类的继承与扩展

类可以被继承,类里面的属性和方法也可以被继承和扩展。

  1. class User{
  2. protected $name="张三";
  3. public function write(){
  4. return "名字是{$this->name}";
  5. }
  6. }
  7. class Rob extends User{
  8. //1.扩展
  9. //属性扩展
  10. protected $age=20;
  11. //方法扩展
  12. public function write(){
  13. //parent::write() 调用父类的函数
  14. return parent::write()."年龄是{$this->age}";
  15. }
  16. //2.重写
  17. //属性重写
  18. protected $name="李四";
  19. //方法重写
  20. // public function write(){
  21. // return "名字是{$this->name}年龄是{$this->age}";
  22. // }
  23. }
  24. $rob=new Rob;
  25. echo $rob->write();


如果不想让方法被继承和重写,要在前面加上final。如
final public function write()
不想让类被继承,在前面也加上final。如
final class User

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