PHP实践之路(八)类与对象(1)
2013-07-05 10:32
375 查看
PHP实践之路(目录索引)
b、伪变量 $this 可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象的引用
c、self在类内部代表类本身
d、创建一个类的实例用new关键字
e、PHP当中对象是按引用传递的
f、当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样
根据以上知识点,我们做如下实验
b、在成员变量的前面添加关键字public、protected 或private来达到成员变量的访问控制。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问
c、为了兼容php4,php5声明属性依然可以直接使用关键字var,或者放在public, protected, orprivate之前。但是var并不是必须的。在php 5.0 到5.1.3,var会认为是废弃的, 而且抛出
或 private,php 5 会认为这个属性为public
d、在类的成员方法里面,可以通过$this->property这种方式来访问类的属性,但是要访问类的静态属性里面却不能使用,而是使用self::$property
e、类成员都必须使用关键字public、protected 或 private 进行定义
f、在定义类成员方法时,不添加访问控制修饰符时默认为public
实验时间
b、PHP5.3.0之后,我们可以用一个变量来动态调用类。但该变量的值不能为关键字self, parent 或static
实验一下
类与对象(1)
类与对象的知识点较多,我们这里将分几篇文章来分别阐述1、概述
a、类的定义以class为关键字,类名可以是任何非PHP保留字的名字。类的实体内容定义在一对花括号内部,模型如下class 类名{ statement... }
b、伪变量 $this 可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象的引用
c、self在类内部代表类本身
d、创建一个类的实例用new关键字
e、PHP当中对象是按引用传递的
f、当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样
根据以上知识点,我们做如下实验
<?php //换行输出 function println($var){ echo $var; echo "<br />"; } //定义一个类Person class Person{ private $name = "jack"; static $category="chinese"; public function getName(){ return $this->name; //$this为变量的使用 } public function setName($name){ $this->name=$name; //这里如果用$name = $name;的话将不会对成员变量$name有任何的影响 } public function getCategory(){ return self::$category; //访问静态变量,这里和使用Person::$category是一样的结果,但在类内部最好使用self,因为当类名发生变化时,用self就不用改代码了 } } $p1 = new Person(); //使用new来创建一个对象 println($p1->getName()); //jack $p2 = $p1; //对象赋值,$p2访问的实例将指向$p1指向的对象 println($p2->getName()); //jack $p3 = &$p1; //引用赋值,$p3指向$p1 println($p3->getName()); //jack $p1->setName("lucy"); println($p1->getName()); //lucy println($p2->getName()); //lucy println($p3->getName()); //lucy $p1 = NULL; //$p1和$p3将都为null,$p2还指向了刚开始创建的那个对象 var_dump($p1); //null var_dump($p2); /* object(Person)[1] private 'name' => string 'lucy' (length=4) */ var_dump($p3); //null println($p2->getCategory()); //chinese //此处虽然按值传递,但由于是对象,所以为引用传递 function changeName($obj){ $obj->setName("lily"); //将改变对象的$name } changeName($p2); println($p2->getName()); //lily ?>
2、成员变量
a、类的成员变量也可以叫做类的属性、字段和特征等,它表示了一个类数据有的属性,也就是数据b、在成员变量的前面添加关键字public、protected 或private来达到成员变量的访问控制。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问
c、为了兼容php4,php5声明属性依然可以直接使用关键字var,或者放在public, protected, orprivate之前。但是var并不是必须的。在php 5.0 到5.1.3,var会认为是废弃的, 而且抛出
E_STRICT警告,但是5.1.3之后就不再认为是废弃,也不会抛出警告。 如果直接使用var声明属性,而没有public,protected,
或 private,php 5 会认为这个属性为public
d、在类的成员方法里面,可以通过$this->property这种方式来访问类的属性,但是要访问类的静态属性里面却不能使用,而是使用self::$property
e、类成员都必须使用关键字public、protected 或 private 进行定义
f、在定义类成员方法时,不添加访问控制修饰符时默认为public
实验时间
<?php //换行输出 function println($var){ echo $var; echo "<br />"; } //定义一个类Person class Person{ static $category = "chinese"; //类别,静态变量 private $age = 10; //年龄,私有变量 public $name = "jack"; //年龄,公开变量 var $work = ""; //工作,用var申明的变量为public //内部获取类别 public function getCategory(){ return self::$category; //此处若用$this->category将报错 } //内部获取年龄 public function getAge(){ return $this->age; } } println(Person::$category); //类外部获取类的静态变量,输出chinese $p = new Person(); //创建一个对象 println($p->getCategory()); //chinese println($p->name); //外部访问公开变量,输出jack //println($p->age); //外部返给私有变量,报错Fatal error: Cannot access private property Person::$age println($p->getAge()); //通过公开方法getAge()来获取对象的私有属性age,输出10 ?>
3、类常量
a、类常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号,使用const关键字来定义类常量b、PHP5.3.0之后,我们可以用一个变量来动态调用类。但该变量的值不能为关键字self, parent 或static
实验一下
<?php //换行输出 function println($var){ echo $var; echo "<br />"; } //定义一个类Person class Person{ const CLASS_NAME="Person"; //定义一个类常量 function getVal(){ return self::CLASS_NAME; //类内部访问常量,此处也可以用$this::CLASS_NAME } } println(Person::CLASS_NAME); //类外部访问常量,输出Person $p = new Person(); println($p::CLASS_NAME); //使用对象访问常量,输出Person println($p->getVal()); //输出Person $val="Person"; println($val::CLASS_NAME); //变量来动态调用类,输出Person ?>
相关文章推荐
- PHP实践之路(九)类与对象(2)
- PHP实践之路(十)类与对象(3)
- 面向对象实践之路-提升抽象层次
- PHP实践之路(四)PHP中常量和变量
- 深入PHP面向对象、模式与实践——企业模式(2)
- 深入PHP面向对象、模式与实践——对象
- 深入php面向对象、模式与实践
- php源码之路第五章第七节 (对象)
- 深入PHP面向对象、模式与实践——对象工具(2)
- PHP对象、模式与实践之高级特性分析
- 深入PHP面向对象、模式与实践——高级特性(1)
- php面向对象书籍推荐:深入PHP:面向对象、模式与实践(第3版)
- 深入PHP面向对象、模式与实践——设计模式
- PHP核心技术与最佳实践学习(一)面向对象
- php学习笔记(三)面向对象高级实践
- 【小白笔记】PHP学习之路 (23) --对象 __set __get 类和对象的检测
- 面向对象实践之路-提升抽象层次
- php学习笔记(三)面向对象高级实践
- 深入PHP面向对象、模式与实践——模式原则(1)
- 《PHP对象、模式与实践》之高级特性