博客列表 >oop 编程的几个问题

oop 编程的几个问题

逃逃
逃逃原创
2021年08月16日 02:18:38414浏览

oop 编程的几个问题

[toc] //md 内容表

类和对象的关系

  • 类的实体化结果是对象,而对象的抽象就是类,在开发过程中,我们通常都是先抽象(幻想)出一个类,再用该类去创建对象(实现幻想的内容)。在程序中,直接使用的是我们(实现幻想)的对象,而不是抽象(幻想)的类

oop 的封装性/构造函数的作用

  • 其实所谓的 oop 的封装性就是像一个人的特征,
  • 有公开的 public,名字
  • 有受保护的 protected,生日,密码,
  • 有私有的 private,自己的思想

使用修饰符来对属性和方法进行封装:

  1. class Person
  2. {
  3. //下面是人的成员属性
  4. protected $name; //人的名子,被protected封装上了
  5. protected $birthday; //人的生日, 被protected封装上了
  6. private $dream; //人的梦想, 被private封装上了
  7. //定义一个构造方法参数为私有的属性姓名$name、生日$birthday和梦想$dream进行赋值
  8. function __construct($name, $birthday, $dream) {
  9. //通过构造方法传进来的$name给私有成员属性$this->name赋初使值
  10. $this->name = $name;
  11. //通过构造方法传进来的$birthday给私有成员属性$this->birthday赋初使值
  12. $this->birthday = $birthday;
  13. //通过构造方法传进来的$dream给私有成员属性$this->dream赋初使值
  14. $this->dream = $dream;
  15. }
  16. //这个人可以说话的方法, 说出自己的私有属性,在这里也可以访问私有方法
  17. function say() {
  18. echo "我的名子叫:" . $this->name . " 生日:" . $this->birthday . " 我的梦想是:" . $this->dream;
  19. }
  20. //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、生日和梦想
  21. //要new一下
  22. $p1 = new Person("张三", "0811", 有金钱);
  23. $p2 = new Person("李四", "0621", 有妹子);
  24. $p3 = new Person("王二", "0308", 有权利);
  25. //下面访问$p1对象中的说话方法
  26. $p1->say();
  27. //下面访问$p2对象中的说话方法
  28. $p2->say();
  29. //下面访问$p3对象中的说话方法
  30. $p3->say();

注意:只要是成员属性前面有其它的关键字就要去掉原有的关键字”var”。
通过修饰符(public. protected. private)就可以把人的成员(成员属性和成员方法)封装上了。封装上的成员访问就被限制了,public(公共). protected(本类,子类). private(自己)没有加任何访问控制,默认的是 public
因为构造方法是默认的公有方法(构造方法不要设置成私有的),所以在类的外面可以访问到,这样就可以使用构造方法创建对象, 另外构造方法也是类里面的函数,所以可以用构造方法给私有的属性赋初值。Say()的方法是默认公有的, 所以在外面也可以访问的到, 说出他自己的私有属性。
私有的成员只能在类的内部使用, 不能被类外部直接来存取, 但是在类的内部是有权限访问的, 所以有时候我们需要在类的外面给私有属性赋值和读取出来,也就是给类的外部提供一些可以存取的接口,上例中构造方法就是一种赋值的形式, 但是构造方法只是在创建对象的时候赋值,如果我们已经有一个存在的对象了,想对这个存在的对象赋值, 这个时候,如果你还使用构造方法传值的形式传值, 那么就创建了一个新的对象,并不是这个已存在的对象了。所以我们要对私有的属性做一些可以被外部存取的接口,目的就是可以在对象存在的情况下,改变和存取 属性的值,但要注意,只有需要让外部改变的属性才这样做,不想让外面访问的属性是不做这样的接口的,这样就能达到封装的目的,所有的功能都是对象自己来完成,给外面提供尽量少的操作。
如果给类外部提供接口,可以为私有属性在类外部提供设置方法和获取方法,来操作私有属性。例如:

  1. prvate $age; //私有的属性年龄
  2. function setAge($age) { //为外部提供一个公有设置年龄的方法
  3. if ($age<0 || $age>100) //在给属性赋值的时候,为了避免非法值设置给属性
  4. return;
  5. $this->age = $age;
  6. }
  7. function getAge() { //为外部提供一个公有获取年龄的方法
  8. return($this->age);
  9. }

上面的方法是为一个成员属性设置和获取值, 可以为每个属性用同样的方法对其进行赋值和取值的操作,完成在类外部的存取工作。

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