当前位置:首页 > 刀客羽朋《php5 面向对象》 学习笔记
刀客羽朋《php5 面向对象》学习笔记
第一章、 PHP5面向对象基础
1.1类和对象 万事万物皆对象。
类(class)是用来描述一个对象(object):
类描述了每个对象应包括的数据 类描述了每个对象的行为特征
Class/Object:类和对象是面向对象方法的核心概念。
访问权限:
Public(公开): 可以自由的在类的内部外部读取、修改。 Private(私有): 只能在这个当前类的内部读取、修改。 Protected(受保护):能够在这个类和类的子类中读取和修改。
Private 修饰的属性,在当前对象以外不能访问。设臵私有属性是为了进行数据的隐藏。
变量与引用变量
普通变量间的传值方式,就是值的赋值。比如数组:
类是对一类事物的描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称实例(instance); 创建对象的过程称为 创建对象,也称为 实例化;
$arr = array(“foo”=>“old”,12=>true); //定义一个数组 $a = $arr;
//赋值给$a
//改变$arr的值
$arr[“foo”] = “new”; print_r($arr); echo “
”; print_r($a);
//输出$arr //输出$a
1
//可以看到,改变其中一个数组的内容,并没有影响到另外一个变量指向的数组。 ?>
PHP 变量 写时复制:
PHP用引用计算和写时复制来管理内存。
当从一个变量复制值到另一个变量时,PHP没有因为复制值而得到更多的内存,而是更新符号表,以表明“这两个变量是同一块内存的名字”,所以当把$arr赋值给$a时,实际上并没有创建一个新数组。 如果修改任意一个拷贝,那么PHP将分配内存并产生该拷贝。
例如例子中,改变$arr[“foo”]的值为“new”,那个PHP就会分配一块内存出来单独存储$arr数组,这时,$a数组和$arr数组分别指向两个不同的内存单元。
这里看上去好像是传值,实际上是传址,只是当其中一个变量的值改变时,它就会分配到一块新的内存空间。
而指向对象的变量,是一个引用变量。在这个变量里面存储的是指向对象的内存地址。引用变量传值时,传递的是这个对象的指向。而非复制这个对象。 例如:
Class Person{
}
$p1 = new Person(); $p2 = $p1; ?>
2
$p1 = new Person(); $p2 = $p1;
例如:
$p2
Line2
$p1
new Person //注意这里是传递的引用。
Line1
当$p2->name 变为“Jack”时,$p1->name 的值也变成了“Jack” 属性的扩充:
$this 指当前对象。
$this 调用当前对象的 属性 或者 方法。
在类中使用$this-> 调用一个未定义的属性时,PHP5 会自动创建一个属性供使用。
这个被创建的属性,默认的方法权限是 public。
PHP5中的方法:
方法:对对象的属性进行的操作称为对象的方法(也称为行为/操作)。
3
过程、函数、方法:
过程:过程是编制程序时定义的一个语句序列,用来完成某种指定的操作。 函数:函数有返回值,也是定义的语句序列。 方法:在面向对象概念中,类里面的一段语句序列。
一般来说,在面向对象概念中,函数和方法两个名词是通用的。
封装:
封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。
PHP5 中通过将数据封装、声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,以实现下述目的:
1.隐藏一个类的实现细节;
2.防止对封装数据的未经授权的访问。使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
3.有利于保证数据的完整性; 4.便于修改,增强代码的可维护性;
方法的参数:
通过方法定义时的参数,可以向方法内部传递变量。
如果声明这个方法有参数,而调用这个方法时没有传递参数,或者参数数量不足,系统会报出错误。如果参数数量超过方法定义参数的数量,PHP 就忽略多于的参数。不会报错。可以在函数定义时为参数设定默认值。
如上面的例子,可以向一个方法内部传递另外一个对象的引用变量。
4
共分享92篇相关文档