PHP5权威编程阅读学习笔记 附电子书下载

PHP 5 权威编程(PHP 5 Power Programming) PDF下载地址 http://www.jb51.net/books/28207.html

PHP4中,不使用__construct()作为构造函数的名字,必须使用类的名字定义一个方法,就像在C++中一样。
PHP5中,使用新的统一的构造函数命名方式:__construct(),当然,使用类名同样也是可以的。
但是,你如果两个同时使用的话,系统默认会使用__construct()的形式。


代码如下:

<?php
class Person{
//PHP4中的方法
public function Person(){
echo "PHP4中的方法";
}
//PHP5推荐使用的方法
public function __construct(){
echo "PHP5推荐使用的方法";
}
public function say(){
}
}
$p1=new Person();
?>

在构造函数中不能返回值,所以从构造函数内产生一个错误最常用的做法就是抛出一个异常。
代码如下:


代码如下:

<?php
class Person{
private $_age;
public function __construct($age){
try {
if ($age<120){
$this->_age=$age;
}else {
throw new Exception("您输入的年龄过大");
}
}catch (Exception $e){
echo $e->getMessage();
}
}
}
$p1=new Person(121);
?>

访问控制
对象属性的访问保护是OOP的一个关键范例
Public:可以在任何地方被访问
Protected:类成员可以被其所在类的子类和父类从对象内部的方法访问
Private:类成员只能被其所在类从对象内部的方法访问,而无法从继承类的成员中访问到。因为私用成员不会被继承,所以两个相关的类完全可以分别声明一个名字相同的私有变量。
也就是两个类都只能看到自己的私有属性,私有成员之间是没有关系的。
例子:


代码如下:

<?php
/**
* 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::静态方法来调用。


代码如下:

<?php
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)的时候,两个对象都是指向同一块内存区域。
比如 :


代码如下:

<?php
class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1;
$obj2->str="obj2";
echo $obj1->str;//将输出“obj1”
?>

由于$obj1和$obj2指向的是同一块内存区域,因此使用任何一个对象修改其中的成员变量的值的时候,都会影响到另一个对象。
但是在有些时候,我们确实需要复制一个对象的拷贝(两块相互独立的内存区域),这时候可以使用语言命令clone
参考下面的例子;


代码如下:

<?php
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::而不是父类的某个具体的名字,因为这样可以令你方便的更改你的类的层次。
例子:


代码如下:

<?php
class Father{
public function __construct(){
echo "调用父类的构造函数<br>";
}
}
class Son extends Father {
public function __construct(){
parent::__construct();//方式一
// Father::__construct();//方式二
echo "调用子类的构造函数";
}
}
$son=new Son();
?>

结果:
调用父类的构造函数
调用子类的构造函数
推荐使用方式一,原因上面已经说了。
instanceof实例


代码如下:

<?php
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__是一个特殊的常量,用来存储当前类的名字

(0)

相关推荐

  • PHP5权威编程阅读学习笔记 附电子书下载

    PHP 5 权威编程(PHP 5 Power Programming) PDF下载地址 http://www.jb51.net/books/28207.html PHP4中,不使用__construct()作为构造函数的名字,必须使用类的名字定义一个方法,就像在C++中一样. PHP5中,使用新的统一的构造函数命名方式:__construct(),当然,使用类名同样也是可以的. 但是,你如果两个同时使用的话,系统默认会使用__construct()的形式. 复制代码 代码如下: <?php cl

  • 《JavaScript高级编程》学习笔记之object和array引用类型

    本文给大家分享我的javascript高级编程学习笔记之object和array引用类型,涉及到javascript引用类型相关知识,大家一起看看把. 1. Object类型 大多数引用类型值都是Object类型的实例:而且Object也是ECMAScript中使用最多的一个类型. 创建Object实例有如下两种方式: new操作符后跟Object构造函数: var person=new Object( ); person.name="webb"; person.age=25; 对象字

  • Ruby元编程基础学习笔记整理

    笔记一: 代码中包含变量,类和方法,统称为语言构建(language construct). # test.rb class Greeting def initialize(text) @text = text end def welcome @text end end my_obj = Greeting.new("hello") puts my_obj.class puts my_obj.class.instance_methods(false) #false means not i

  • Python的面向对象编程方式学习笔记

    类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. 下面的示例展示了如何创建一个类: class MyNewObjectType(bases): ''' 创建 MyNewObjectType 类''' class_suite 关键字是 class,紧接着一个类名.随后是定义类的类代码.这里通常由各种各样的定义和声明组成.新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类,参数 bases 可以是一个(单继承)或多个(

  • Perl语言入门三部曲 附电子书下载

    第一本.<Perl语言入门(Learning Perl)> Perl语言入门 第六版中文pdf扫描版(Learning Perl, 6th Edition) http://www.jb51.net/books/44237.html 第二本.<Intermediate Perl> 下载地址: http://www.jb51.net/books/58888.html 第三本.<精通Perl (Mastering Perl)> 下载地址: http://www.jb51.ne

  • python网络编程学习笔记(二):socket建立网络客户端

    1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通

  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 filedialog 介绍 使用 首发时间:2018-03-04 22:18 messagebox: 介绍:messagebox是tkinter中的消息框.对话框 使用: 导入模块:import tkinter.messagebox 选择消息框的模式: 提示消息框:[返回"ok"] tkint

  • Python GUI编程学习笔记之tkinter事件绑定操作详解

    本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作.分享给大家供大家参考,具体如下: 相关内容: command bind protocol 首发时间:2018-03-04 19:26 command: command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数 能够定义command的常见控件有: Button.Menu- 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda from tkinter imp

  • Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法.分享给大家供大家参考,具体如下: 相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GU

  • Python GUI编程学习笔记之tkinter界面布局显示详解

    本文实例讲述了Python GUI编程学习笔记之tkinter界面布局显示.分享给大家供大家参考,具体如下: 相关内容: pack 介绍 常用参数 使用情况 常用函数 grid 介绍 常用参数 使用情况 常用函数 place 介绍 常用参数 使用情况 常用函数 首发时间:2018-03-04 14:20 pack: 介绍: pack几何管理器按行或列打包小部件. 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器. pack的排放控件的形式就像将一个个控件按大小从上到

随机推荐