Blogger Information
Blog 24
fans 1
comment 0
visits 20966
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类与对象基础知识-7月21日作业
知行合一
Original
634 people have browsed it

类的声明与实例化

命名规则

  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

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