【小白笔记】PHP学习之路 (20) --类的初始化、析构函数与继承
来源:互联网 发布:男朋友 短小 知乎 编辑:程序博客网 时间:2024/06/07 06:23
PHP中类的方法不区分大小写。由于PHP是弱类型,所以不能定义重名的方法。
如果把一个已经创建对象复制给一个变量,这个变量保留的是对这个对象的引用,而不是生成一个一样的新对象。
protected只能被当前类和子类访问。为类添加方法时如果不交关键字,默认是public。
<?phpclass Person{public $name;public $age;function __construct($x,$s){ //双下划线$this->name = $x;$this->age = $s;echo "进行初始化<br/>";}function sayname(){echo $this->name."<br/>";}function sayage(){echo $this->age;}}$zhangsan = new Person("zhangsan",20);$zhangsan->name = "Lisi";$zhangsan->sayname();$zhangsan->sayage();?>
结果:
进行初始化Lisi20
构造函数: __construct() 对象创建时进行初始化。
析构函数: __destruct() 对象被释放时执行的函数。当页面脚本执行完毕时对象自动释放,
或者手动使用unset()函数进行释放。如果其他变量保留了对象的引用,则必须在
对象的引用均删除后才会释放对象。
面向对象编程特性:抽象 封装 继承 多态
抽象: 把一类对的共同属性和方法抽象出来,形成类,这种思考方式就是抽象。
封装:把成员方法和成员属性封装到类中,隐藏属性和方法,隐藏方法实现的细节,通过
public protected private final static 限定类成员的访问权限,数据被保护在内部,
只有通过被授权的成员方法才可以操作。尽可能的对成员进行封装。
继承:可以使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类。extends 关键字 实现继承关系
多态:子类继承父类,通过对父类方法重写实现多态
类的继承:
class TV{public $color;public $brand;function __construct($color,$brand){$this->color = $color;$this->brand = $brand;echo "完成初始化"."<br/>";}function watch(){echo "看电视"."<br/>";}function __destruct(){echo "释放对象"."<br/>";}}class TVsony extends TV{public $sonyspecial;function watch(){echo "看电视"."<br/>";echo "看sony电视"."<br/>";}}$tv1 = new TVsony("black","brand");$tv1->watch();
结果:
完成初始化看电视看sony电视释放对象
new关键字:通过类创建新对象,类的实例化。
final关键字:规定类不能被继承或类的方法不能被修改或重写。
const关键字:定义类常量,该常量只能在类中访问,类似于define。必须用self关键字访问。
static:声明为类的静态属性或方法。可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。
self关键字:用于访问类的属性。保存当前类的引用。
$this:用于访问对象的属性和方法。
:: 表示访问类的属性和方法。self::保存当前类的应用,parent::保存父类的引用。如parent::__construct。
class a{const s = 0.9;function __construct(){echo "s:".self::s;}}$b = new a();
结果:
s:0.9
类与对象例:
class Person{const class_sex = "男";const class_name = "无名氏";static $type = 'Person';private $obj_sex = self::class_sex; //默认值private $obj_name = self::class_name; //默认值static function sayClass(){echo '<br/>类 姓名:'.self::class_name; //类的属性echo "<br/>类 性别:".self::class_sex; echo "<br/>类型:".self::$type;echo "<br/>-------------------------------";}function __construct($name, $sex){ //如果构造函数为private,那么只能通过类来进行访问$this->obj_name = $name;$this->obj_sex = $sex;echo "<br/>初始化<br/> 性别:".$this->obj_sex; echo "<br/> 姓名:".$this->obj_name;echo "<br/>-------------------------------";}function sayObj(){ echo '<br/>姓名:'.$this->obj_name; //对象的属性echo "<br/>性别:".$this->obj_sex;echo "<br/>-------------------------------";}}Person::sayClass();//Person::sayObj(); //报错$zhangsan = new Person("张三", "男");$zhangsan->sayObj();
结果:
类 姓名:无名氏类 性别:男类型:Person-------------------------------初始化 性别:男 姓名:张三-------------------------------姓名:张三性别:男-------------------------------
另一个例子:
class e{public $uname;static $obj = NULL;private function __construct(){ //只能被内部函数构造}static function getObj(){ //只能通过访问类本身来调用if(is_null(self::$obj)){ //单例模式,只能生成1个公用对象self::$obj = new e();}return self::$obj;}}$d = e::getObj(); //访问类本身来创建一个实例$d->uname = 100;echo $d->uname."<br/>";$e = e::getObj(); //由于类的实例static $obj != null,因此返回$obj的引用$e->uname = 200; echo $e->uname."<br/>"; echo $d->uname."<br/>";
结果:
100200200
实际上,__construct()也可以用类名来代替:
class person{private $name = 'person';function person(){echo $this->name;}}$lisi = new person();
结果:
person
但一般都使用__construct()构造函数来进行初始化,因为这样语义更清晰。并且当修改类名时不必修改构造函数。
一个简单例子:
class A{function d(){echo 1111;echo "<br/>";}function show(){$this->d();}}class B extends A{function d(){parent::d();echo 2222;echo "<br/>";}}$e = new B();$e->show();
结果:
11112222
魔术常量:返回该常量所在位置的相关属性。
__CLASS__
__METHOD__
__FUNCTION__
__FILE__ 返回所在文件的绝对路径。
__DIR__ 与dirname(__FILE__)一样。但低于PHP5.3版本的无法识别。
DIRECTORY_SEPARATOR 路径分隔符。
例:
$path = dirname(__FILE__);define(WEBDIR, $path);define(TEMPLATE, WEBDIR.DIRECTORY_SEPARATOR.'template');echo TEMPLATE;
如果一个文件中含有__FILE__,后一个文件将其引入,则__FILE__仍然表示前一个文件所在路径。
- 【小白笔记】PHP学习之路 (20) --类的初始化、析构函数与继承
- Java学习笔记之继承与初始化
- 【小白笔记】PHP学习之路 (7) --函数
- C++学习笔记_2:单一继承时的构造函数与析构函数
- php学习笔记之--函数的声明与应用
- 【小白笔记】PHP学习之路 (23) --对象 __set __get 类和对象的检测
- C++ Primer Plus学习笔记之继承类的初始化顺序
- 【小白笔记】PHP学习之路 (25) --文件判断与操作
- 【小白笔记】PHP学习之路 (26) --文件上传与下载、配置
- 【小白笔记】PHP学习之路 (1)
- 【小白笔记】PHP学习之路 (2)
- 【小白笔记】PHP学习之路 (3)
- 【小白笔记】PHP学习之路 (4) --数据类型
- 【小白笔记】PHP学习之路 (5) --运算符
- 【小白笔记】PHP学习之路 (6) --流程控制
- 【小白笔记】PHP学习之路 (8) --代码重用
- 【小白笔记】PHP学习之路 (32) --session(2)
- 【小白笔记】PHP学习之路 (33) --正则表达式
- 小技巧(持续更新)
- eye closure detection using flandmark toolbox
- android应用面试宝典;footerview自动添加在下翻页的最后一项;主界面返回键退出提示
- About_C_003
- uva 11589 - Save the President(暴力)
- 【小白笔记】PHP学习之路 (20) --类的初始化、析构函数与继承
- About_C_004
- oracle数据库触发器学习
- 100天坚持行动---第四次违反了7无
- 深入探讨各种背包算法问题
- struct hdr_cmn
- PHP+jQuery实现Ajax分页效果:jPaginate插件的应用
- About_C_005
- now or later