PHP5权威编程阅读学习笔记 附电子书下载_PHP教程
PHP 5 权威编程(PHP 5 Power Programming) PDF下载地址 http://www.jb51.net/books/28207.html
PHP4中,不使用__construct()作为构造函数的名字,必须使用类的名字定义一个方法,就像在C++中一样。
PHP5中,使用新的统一的构造函数命名方式:__construct(),当然,使用类名同样也是可以的。
但是,你如果两个同时使用的话,系统默认会使用__construct()的形式。
class Person{
//PHP4中的方法
public function Person(){
echo "PHP4中的方法";
}
//PHP5推荐使用的方法
public function __construct(){
echo "PHP5推荐使用的方法";
}
public function say(){
}
}
$p1=new Person();
?>
在构造函数中不能返回值,所以从构造函数内产生一个错误最常用的做法就是抛出一个异常。
代码如下:
class Person{
private $_age;
public function __construct($age){
try {
if ($age$this->_age=$age;
}else {
throw new Exception("您输入的年龄过大");
}
}catch (Exception $e){
echo $e->getMessage();
}
}
}
$p1=new Person(121);
?>
访问控制
对象属性的访问保护是OOP的一个关键范例
Public:可以在任何地方被访问
Protected:类成员可以被其所在类的子类和父类从对象内部的方法访问
Private:类成员只能被其所在类从对象内部的方法访问,而无法从继承类的成员中访问到。因为私用成员不会被继承,所以两个相关的类完全可以分别声明一个名字相同的私有变量。
也就是两个类都只能看到自己的私有属性,私有成员之间是没有关系的。
例子:
/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 可以对 public 和 protected 进行重定义,但 private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private
注意:类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
静态方法
静态方法可以不创建对象实例就通过 类名::静态方法 来调用,也可以在一个对象实例中通过$this->静态方法或self::静态方法来调用。
class Foo
{
public static $my_static = 'foo';
public static function staticValue() {
return self::$my_static;//在类中访问静态成员使用self关键字
}
}
$obj=new Foo();
echo $obj->staticValue();//方式一
echo Foo::staticValue();//方式二
?>
克隆对象
在PHP4中,new一个对象的时候,返回的是“对象本身”
在PHP5中,new一个对象的时候,返回的是“指向对象的句柄”
这意味着在PHP5中,将对象实例($obj1)赋值给另一个变量($obj2)的时候,两个对象都是指向同一块内存区域。
比如 :
class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1;
$obj2->str="obj2";
echo $obj1->str;//将输出“obj1”
?>
由于$obj1和$obj2指向的是同一块内存区域,因此使用任何一个对象修改其中的成员变量的值的时候,都会影响到另一个对象。
但是在有些时候,我们确实需要复制一个对象的拷贝(两块相互独立的内存区域),这时候可以使用语言命令clone
参考下面的例子;
class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= clone $obj1;
$obj2->str="obj2";
echo $obj1->str;//将输出“obj2”
?>
parent::和self::
self::指向当前类,而且通常用来访问静态成员,方法和常量
parent::指向父类,而且它经常被用来调用父类的构造函数和方法,也可以用来访问父类的成员和常量
注意:你应该使用parent::而不是父类的某个具体的名字,因为这样可以令你方便的更改你的类的层次。
例子:
class Father{
public function __construct(){
echo "调用父类的构造函数
";
}
}
class Son extends Father {
public function __construct(){
parent::__construct();//方式一
// Father::__construct();//方式二
echo "调用子类的构造函数";
}
}
$son=new Son();
?>
结果:
调用父类的构造函数
调用子类的构造函数
推荐使用方式一,原因上面已经说了。
instanceof实例
class Rectangle {
public $name=__CLASS__;
}
class Square extends Rectangle {
public $name=__CLASS__;
}
class Circle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name;
}else {
echo "该对象不是Rectangle类的实例";
}
}
checkIfRectangle(new Square());//输出:Square
checkIfRectangle(new Circle());//输出:该对象不是Rectangle类的实例
?>
注:__CLASS__是一个特殊的常量,用来存储当前类的名字

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

Python 使初学者能够解决问题。其用户友好的语法、广泛的库以及变量、条件语句和循环等功能可实现高效的代码开发。从管理数据到控制程序流程和执行重复任务,Python 提供了

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
