heiyeluren的blog(黑夜路人的开源世界)

关注LAMP,Web开发,OpenSource,系统架构

谢华亮ID:heiyeshuwu
852288次访问,排名40好友51人,关注者82
既然决定远行,便只顾风雨兼程。
heiyeshuwu的文章
原创 279 篇
翻译 3 篇
转载 202 篇
评论 523 篇
heiyeluren的公告

联系方式:


访问统计: free hit counter code
FeedSky订阅:
FeedSky订阅
最近评论
a:效率奇低无比,垃圾代码!
a:效率奇低无比,垃圾代码!
happyfish100:国人前不久推出的一款分布式文件系统FastDFS:http://code.google.com/p/fastdfs/
happyfish100:国人前不久推出的一款分布式文件系统FastDFS:http://code.google.com/p/fastdfs/
ff:dferer
文章分类
收藏
    相册
    技术图片
    搜索引擎
    ::eYou::
    kevin world
    lewis - 老吕
    qyb - BT的花
    Realzay的blog
    叶金荣
    天堂地狱鬼-dulao5's Blog
    沙漠之周
    狐狸糊涂
    老韩
    與子觀化
    ::Yahoo::
    glemir’s blog
    happy_fish - 分布式文件系统FastDFS
    Rainx
    stauren
    互联网,请记住我 - 162同学的技术博客
    小蚂蚁同学滴测试博客
    张彪同学
    随网之舞 - kaven的DHTML博客
    风雪之隅
    ::朋友::
    【推荐】中文分类网
    DDR的博客
    kevin world
    miky
    俺兄弟的blog
    冰河的技术博客:心随风动
    好旅网
    小少的技术博客
    无尘居
    晋陵路人的Blog
    李天华同学滴技术博客
    沙狐部落
    轻量级的editor
    ::网友::
    Code & Stock.
    LionD8的Blog
    Phzzy
    张贺同学的博客
    技术大牛老余的博客
    抚琴居
    程序人生
    邢红瑞的blog
    阿健的博客
    :PHP博客:
    .: Easy style :.
    [琴剑楼]
    CoolCode.cn
    Haohappy的Blog
    Hightman
    iwind的blog
    Javascript开发站
    JD Space
    Nio's Weblog
    Open Source PHP
    PHP面对对象
    SourceForge.net
    trip的专栏
    UGIA.cn
    windix's blog
    Windix's Weblog
    一个藏袍
    俊麟 Michael`s blog
    偶然的blog
    刘敏的blog
    大龄青年的Blog
    廖宇雷的blog
    懒猫开始新生活blog
    某人的栖息地
    王春生的博客
    神仙
    :牛人blog:
    DBA notes
    http://blog.csdn.net/tingya/
    侯捷网站
    孟岩
    搜索引擎研究
    方舟
    王咏刚的BLOG
    竹笋炒肉
    荣耀
    车东[Blog^2]
    透明思考
    陈硕的Blog
    DHTML
    DHTMLGoodies
    FCKEditor
    Google Code
    Google Web Toolkit
    HTML Goodies
    HTML.it
    HTMLAre
    HTMLdog
    JavaScript Kit
    jQuery
    KindEditor
    Prototype
    TinyMCE
    W3 Schools
    Yahoo JavaScript Developer Center
    Yahoo! Developer Network
    Yahoo! UI Library (YUI)
    网页设计师Web标准
    Java国内站
    ChinaJavaWorld.com技术论坛
    IBM developerWorks 中国: Java
    Java中文站
    Java开源大全
    Java爱好者
    JR - Java翻译站
    J道-JDON
    Matrix: 与Java共舞
    中国Java开发网
    中文java技术网
    PHP国内站点
    CSDN PHP论坛
    Discuz!
    FleaPHP
    Google--PHP用户组
    IBM DeveloperWorks
    JavsScript技术讨论
    Nirvana Studio
    OpenPHP.cn
    PHPChina
    TiM Club
    中文 PFC 1.0 手册--PHP5的开发包
    中文 PFC 1.0 手册--PHP5的开发包
    中文PHP网
    太平洋--PHP开发区
    爱MySQL
    超越PHP
    PHP国外站点
    ADOdb
    Agavi Framework
    Cake PHP
    MySQL Performance Blog
    MySQL Performance Blog
    Nonaweb
    PEAR
    PECL
    PECL Windows
    PHP Builder
    PHP Classes
    PHP Classes
    PHP New Download
    PHP Security Consortium
    php.MVC
    php.MVC
    PHPkitchen(OO & MVC)
    phpPatterns
    PHP国外图书下载
    smart template
    Smarty
    SourceForge.net
    Symfony Framework
    Zend
    Zend Framework
    Unix C/C++
    Free Gentux
    周立发的blog(Linux C)
    Unix/Linux
    BSD智库
    ChinaUnix
    FreeBSDChina
    FreeLAMP
    IBM开发者Linux专区
    Linux Byte
    LinuxKit
    LinuxTS
    Linux伊甸园
    Linux技术中坚站
    Linux非常空间
    Love Unix
    NetBSD&OpenBSD中文用户组
    NetBSD中国社区
    Oracle中国用户讨论组
    OurLinux
    Unix中文
    Unix中文
    Unix中文宝库
    中国Linux公社
    中国Unix用户技术论坛
    中文FreeBSD用户组
    永远的Unix
    炎黄角马
    程序设计
    CSDN
    IBM开发者中心
    Microsoft TechNet: 主页
    MSDN 中文网站
    PHP中文站
    Sun技术社区
    中国IT认证实验室--企业应用技术
    中国协议分析网
    喜悦国际村
    太平洋电脑网---开发特区
    实用网站
    veBook(国外大量免费图书下载网站)
    Whois.net
    中国Web信息博物馆
    中国互联网络信息中心whois查询
    服务器系统信息查看
    网络安全
    AnySide.com
    CGI Secutiry
    K-OTik Security Monitoring
    Linux Security
    Packet Storm Security
    PHP Secure
    RFC中文文档索引
    Safemode.org
    SecuriTeam.com
    Security Corporation
    SecurityFocus
    SecurityTracker
    Zone-h (区域黑客,每天公布各国被黑的网站)
    中华安全网
    中国信息安全组织
    国家计算机网络应急处理中心
    安全天使
    安全焦点
    幻影旅团
    绿盟科技
    网络安全评估中心(cnns )
    在线手册
    Apache2.0中文文档
    Beyond Linux From Scratch
    Debian参考手册
    FreeBSD Porter 手册
    FreeBSD使用手册
    Linux C函数中文参考手册
    MySQL 4.1.0 中文参考手册
    NetBSD在线手册
    OpenBSD在线FAQ
    PHP ADODB 1.99版手册中文翻译(Tripc)
    PHP中文手册(国内)
    PHP中文手册(国外)
    PostgreSQL中文文档
    Red Hat Linux 9入门指南
    Red Hat Linux 9安装指南
    Red Hat Linux 9定制手册
    中国OSS技术手册中心
    技术文档手册中心-ChinaUnix
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 PHP5中的this,self和parent关键字详解收藏

    新一篇: 〖毕业感怀〗---重读旧文,回忆旧事,无限感伤 | 旧一篇: MSN上关于C++的异常处理和名字空间的聊天记录

    PHP5中的this,self和parent关键字详解

    文/heiyeluren
    2004/11/03


    PHP5是一具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说的不好,请高手见谅. (阅读本文,需要了解PHP5的面向对象的知识)

    首先我们来明白上面三个关键字: this,self,parent,从字面上比较好理解,是指这,自己,父亲,呵呵,比较好玩了,我们先建立几个概念,这三个关键字分别是用在什么地方呢?我们初步解释一下,this是指向当前对象的指针(我们姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针。我们这里频繁使用指针来描述,是因为没有更好的语言来表达,呵呵,语文没学好。 -_-#

    这么说还不能很了解,那我们就根据实际的例子结合来讲讲。


    (1) this

    1 <?php
    2
    3 class UserName
    4 { 
    5     //定义属性   
    6     private $name;

    8     //定义构造函数
    9     function __construct( $name )
    10     {
    11          $this->name = $name; //这里已经使用了this指针
    12     }
    13 
    14     //析构函数
    15     function __destruct(){}
    16
    17     //打印用户名成员函数
    18     function printName()
    19     {
    20          print( $this->name ); //又使用了this指针
    21     }
    22 }
    23
    24 //实例化对象
    25 $nameObject = new UserName( "heiyeluren" );
    26
    27 //执行打印
    28 $nameObject->printName(); //输出: heiyeluren
    29
    30 //第二次实例化对象
    31 $nameObject2 = new UserName( "PHP5" );
    32
    33 //执行打印
    34 $nameObject2->printName(); //输出:PHP5
    35 ?>

    我们看,上面的类分别在11行和20行使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象的时候(25行),那么当时this就是指向$nameObject对象,那么执行18行的打印的时候就把print( $this-><name )变成了print( $nameObject->name ),那么当然就输出了"heiyeluren"。第二个实例的时候,print( $this->name )变成了print( $nameObject2->name ),于是就输出了"PHP5"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。

     

    (2)self

    首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。

    1 <?php
    2
    3     class Counter
    4     {
    5         //定义属性,包括一个静态变量
    6         private static $firstCount = 0;
    7         private $lastCount;
    8
    9         //构造函数
    10         function __construct()
    11         {
    12              $this->lastCount = ++selft::$firstCount; //使用self来调用静态变量,使用self调用必须使用::(域运算符号)
    13         }
    14
    15         //打印最次数值
    16         function printLastCount()
    17         {
    18              print( $this->lastCount );
    19         } 
    20     }
    21
    22 //实例化对象
    23 $countObject = new Counter();
    24
    25 $countObject->printLastCount(); //输出 1
    26
    27 ?>

    我们这里只要注意两个地方,第6行和第12行。我们在第二行定义了一个静态变量$firstCount,并且初始值为0,那么在12行的时候调用了这个值得,使用的是self来调用,并且中间使用"::"来连接,就是我们所谓的域运算符,那么这时候我们调用的就是类自己定义的静态变量$frestCount,我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this来引用,可以使用self来引用,因为self是指向类本身,与任何对象实例无关。换句话说,假如我们的类里面静态的成员,我们也必须使用self来调用。


    (3)parent

    我们知道parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。

    1 <?php
    2
    3 //基类
    4 class Animal
    5 {
    6     //基类的属性
    7     public $name; //名字
    8
    9     //基类的构造函数
    10     public function __construct( $name )
    11     {
    12          $this->name = $name;
    13     }
    14 }
    15
    16 //派生类
    17 class Person extends Animal //Person类继承了Animal类
    18 {
    19     public $personSex; //性别
    20     public $personAge; //年龄
    21
    22     //继承类的构造函数
    23     function __construct( $personSex, $personAge )
    24     {
    25          parent::__construct( "heiyeluren" ); //使用parent调用了父类的构造函数
    26          $this->personSex = $personSex;
    27          $this->personAge = $personAge;
    28     }
    29
    30     function printPerson()
    31     {
    32          print( $this->name. " is " .$this->personSex. ",this year " .$this->personAge );
    33      }
    34 }
    35
    36 //实例化Person对象
    37 $personObject = new Person( "male", "21");
    38
    39 //执行打印
    40 $personObject->printPerson(); //输出:heiyeluren is male,this year 21
    41
    42 ?>


    我们注意这么几个细节:成员属性都是public的,特别是父类的,是为了供继承类通过this来访问。我们注意关键的地方,第25行:parent::__construct( "heiyeluren" ),这时候我们就使用parent来调用父类的构造函数进行对父类的初始化,因为父类的成员都是public的,于是我们就能够在继承类中直接使用this来调用。


    总结:

    this是指向对象实例的一个指针,self是对类本身的一个引用,parent是对父类的引用。

    基本上我所了解就这么多,肯定有理解错误之处,请高手指出!

    我的邮箱: heiyeluren@163.com

    WriteTime: 2004-11-3 18:30

    发表于 @ 2004年11月03日 18:46:00|评论(loading...)|编辑

    新一篇: 〖毕业感怀〗---重读旧文,回忆旧事,无限感伤 | 旧一篇: MSN上关于C++的异常处理和名字空间的聊天记录

    评论

    #heiyeluren 发表于2004-11-03 21:00:00  IP:
    TrackBack来自《理解PHP5中static和const关键字》

    Ping Back来自:blog.csdn.net
    #浪流の猫 发表于2007-10-06 14:29:29  IP: 60.20.197.*
    是不是只有在静态类成员的时候才要以用self
    #出会い系サイト 发表于2008-05-17 01:23:38  IP: 124.24.238.*
    出会い出会い系サイト出会い喫茶出会い掲示板ナンパ出会いカフェ人妻出会い無料系サイト優良出会い系攻略完全無料。アダルトビデオアダルト動画アダルトアニメアダルト画像アダルトサイト無料DVDアダルト風俗サンプル無料風俗優良アダルトサイト比較海外。人妻画像人妻パラダイス知合い人妻援護会人妻コレクション風俗告白。熟女画像東京熟女掲示板動画熟女ビデオおまんこオナニーエロ画像エロフラッシュアニメエロ動画エロゲームエロ漫画無料エロサイト。エッチ画像エッチ動画エッチ小説写真エッチアニメエッチ0930。セックスアナルセックス画像セックス動画セックスフレンドスワッピング
    #浪子 发表于2008-05-30 10:57:09  IP: 61.172.203.*
    谢谢作者做了这么详细的说明,辛苦了.
    #f 发表于2008-07-16 15:29:32  IP: 122.218.25.*
    無料出会い
    恋人出会い
    メル友出会い
    熟女出会い
    人妻出会い
    地域別出会い
    出会い系
    人妻出会い
    熟女出会い
    ギャル曽根
    ギャル出会い
    愛知県ギャル出会い
    秋田県ギャル出会い
    青森県ギャル出会い
    愛媛県ギャル出会い
    福井県ギャル出会い
    福岡県ギャル出会い
    福島県ギャル出会い
    岐阜県ギャル出会い
    群馬県ギャル出会い
    広島県ギャル出会い
    #出会い 发表于2008-08-02 08:30:27  IP: 121.102.44.*
    出会い新しい出会いがすぐできること間違いないでしょう!出会い新しい出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い
    出会い出会い系サイト出会い系サイト出会い系サイト一覧 無料出会い無料出会い無料出会いサイト 出会いカフェ出会いカフェ出会いカフェて何 待ち合わせ待ち合わせ待ち合わせはどこ 出会いサクラ出会いサクラ出会いサクラに着お付け 無料出会い無料出会い無料出会いサイト 優良出会い優良出会い優良出会い集合 出会い系サイト出会い系サイト出会い系サイトランキング 出会い
    #出会い 发表于2008-08-02 08:34:23  IP: 121.102.44.*
    出会いがすぐできること間違いないでしょう!出会い新しい出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い出会い
    出会い出会い系サイト出会い系サイト出会い系サイト一覧 無料出会い無料出会い無料出会いサイト 出会いカフェ出会いカフェ出会いカフェて何 待ち合わせ待ち合わせ待ち合わせはどこ 出会いサクラ出会いサクラ出会いサクラに着お付け 無料出会い無料出会い無料出会いサイト 優良出会い優良出会い優良出会い集
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © heiyeluren