Blogger Information
Blog 16
fans 0
comment 0
visits 11179
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
oop 编程的几个问题
逃逃
Original
411 people have browsed it

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. }

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

Correcting teacher:PHPzPHPz

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