phphot

php,linux,mysql,apache

用户操作
[即时聊天] [发私信] [加为好友]
小秘密ID:phphot
969257次访问,排名28好友168人,关注者297
php,apache,mysql,linux,html,css,javascript
phphot的文章
原创 3828 篇
翻译 0 篇
转载 15 篇
评论 651 篇
小秘密的公告


经典推荐!!!
离开公司时留给公司的十句话 与大家分享

史上最全的小白兔的笑话

从一则笑话分析需求的陷阱

本科差点没能毕业,工作五年后年收入过百万

从小公司到500强 80年代人的面试宝典

那些雷得我们如此销魂的台词

老IT人追忆十五年IT从业经历

汶川大地震牛B语录集锦

千百万学子未来几年的出路

大学时代影响我的人生的10件大事-前辈的经验

噩梦的那一年-程序员之路

成功的背后!(给所有IT人)

一部让大学生少奋斗10年的成功宝典

职业生涯中12个最致命的想法

华为面试,第三轮被拒,想哭

一个牛人给java初学者的建议

黑客帝国之PHP与ASP.net不得不说的故事

一个应界毕业生的深圳求职经历。

程序人生:女程序员的求职奋斗史

2008春晚诗朗诵《心里话》之程序员版

最高境界---笑到肚子疼!!!!

是非人生——一个菜鸟程序员的5年人生路

网友10年跳槽经验总结

2008年IT行业10大热门职业调查结果出炉

百度实习经验总结

一点感慨,与诸君共勉,正式告别程序员生涯

程序员V.S.编程语言你上“贼船”了吗

上海IT精英群体某些行为特征被妖魔化

五百强各大行业简介+面试流程及技巧

08年各大公司薪水最新行情全面曝光


XML聚合
feedsky
最近评论
zjxzou:yue
xlsoft1983:Linux 环境下的多核调试
— Intel + Totalview 强强联合!
目前,在软件开发行业,各种性能优异的调试工具层出不穷。但是,它们中的绝大部分都只支持windows环境。即使能支持linux平台,操作起来也很不方便。因此,对于长期在linux上编写程序的开发人员来说,如何调试就成了一个令人头痛的问题!Intel软件 和 Total……
xlsoft1983:Linux 环境下的多核调试
— Intel + Totalview 强强联合!
目前,在软件开发行业,各种性能优异的调试工具层出不穷。但是,它们中的绝大部分都只支持windows环境。即使能支持linux平台,操作起来也很不方便。因此,对于长期在linux上编写程序的开发人员来说,如何调试就成了一个令人头痛的问题!Intel软件 和 Total……
xlsoft1983:Linux 环境下的多核调试
— Intel + Totalview 强强联合!
目前,在软件开发行业,各种性能优异的调试工具层出不穷。但是,它们中的绝大部分都只支持windows环境。即使能支持linux平台,操作起来也很不方便。因此,对于长期在linux上编写程序的开发人员来说,如何调试就成了一个令人头痛的问题!Intel软件 和 Total……
good_Alex55:晚辈受教了......
文章分类
收藏
    相册
    YY的图(禁)
    绝对精彩
    网上好图(禁)
    我的工作(禁)
    我的作品(禁)
    热门站
    baidu
    google
    yahoo
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 PHP面向对象之----SET和GET收藏

    新一篇: 一直用的一个分页类 | 旧一篇: PHP5面向对象的特性之对照java不完全分析

    PHP web 开发第三版中,对于__SET()和__GET()大概是这么说的:

    在一个类中,可以访问一个特殊的指针—$this。如果当前类的一个属性为$attribute,则当该类中通过一个操作设置或访问该变量时,可以使用$this -> attribute来引用。

    如下说明了如何在一个类中设置和访问属性:

    class classname
    {
      var $attribute;
      function operation($param)
      {
        $this -> attribute = $param;
        echo $this -> attribute;
      }
    }

    是否可以在类的外部访问一个属性是由访问修饰符来确定的,关于访问修饰符以后详细介绍(我先说一下,public就是共有,private就是私有,私有只能在类的内部访问,
    protected是保护的,只能在类的内部或这个类的子类内访问下面这个例子没有对属性设置限制的访问,因此可以按照如下所示的方式从类的外部访问属性:

    class classname
    {
      var $attribute;
    }
    $a = new classname();
    $a -> attribute = 'value';
    echo $a -> attribute;


    通常,从类的外部直接访问类的属性试糟糕的想法。面向对象方法的一个优点就是鼓励使用封装。可以通过使用__GET(),__SET()函数来实现对属性的访问。
    )(顺 便我说一下,对于没有接触过面向对象编程的初学者来说可能会误认为 $a是一个classname的实例,那么$a调用一个private的属性应该是可以的吧,这样应该不叫类外吧?这样理解是不对的。类内,类外就是指类 的定义部分而言,在这个定义(大花括号之内)部分内的就是类内。)
    书中大概就是这么说的,后面还有一个例子,只不过是实例化了一个类,然后再设置或访问这个类实例的属性而已。我把例子直接帖出来,大家一看就明白了

    class classname
    {
      var $attribute;

      function __GET($name)
      {
        return $this -> $name;//注意,设置的时候name前要加$符号
      }
      function __SET($name, $value)
      {
        $this -> $name = $value;
      }
    }
    $a = new classname();
    $a -> attribute = 5;

    echo $a -> attribute;

    那么,我想说的是,如果有两个属性,是不是照样可以识别呢?(因为C#等中的get,set是对每一个属性分别设置的,所以我想测试一下)。我测试的代码如下:

    <?php

    class test
    {
     var $name;
     var $age;

     function __set($name,$value)
     {
      $this->$name = $value ;
     }

     function __get($name)
     {
      return $this->$name;
     }

    }


    $a = new test();
    $a -> name = 5;
    echo $a->name . "<br/>" ;

    $a -> age = "12";
    echo $a->age;
    ?>

    不出所料,输出结果是,5 和 12。

    这时,我想在输入名字$name这个属性的时候自动添加一个字符串进去,可以吗?于是我修改__SET函数为如下:

     function __set($name,$value)
     {
      if ($name == 'name')
        $this->$name = $value + 'yyf';
      else
        $this->$name = $value ;
    }

    测试: 结果还是 5 和 12。为什么呢?
    我认为可能是因为定义属性的关键字 var 的问题,于是,我修改var 为 private,再测试就正常了!

    后来,我又接着把访问修饰符改为public,protected测试,发现如果是 public 的就又不行了,而protected则正确。

     

    发表于 @ 2007年09月10日 09:02:00|评论(loading...)|编辑

    新一篇: 一直用的一个分页类 | 旧一篇: PHP5面向对象的特性之对照java不完全分析

    评论

    #wzm112k 发表于2008-05-14 17:04:41  IP: 222.67.122.*
    本人对上面这位仁兄的分析在进行分析,得出这样的结论:
    PHP中的__set 和__get 方法只对,private和protected 有效,对于public,var 公共的无效,是私有类型方法的延伸!这样理解是最贴切不过的!
    上面这位仁兄的最后一段可以看出.当类属性类型为private和 protected 是,__get(),和__set()才起效,就是有了__get()和__set(),类中的私有变量也可使用
    echo $a->age; 抛出age可以获得值,显然私有变量本身不可以这样被抛出(不信去掉其中的__get和__set试试),只有共有变量可以做到,显然可以这样做的原因是得到了__get()和__set()方法的延展, 具体证明方法也有,你在其中保留__set(),去掉__get,通过外部给类中一个变量赋值,然后在echo $a->age 看看,是不是出错,可以证明是__get()的延展,同样也可以证明是__set()的延展!

    #wzm112k 发表于2008-05-14 17:10:26  IP: 222.67.122.*
    本人对上面这位仁兄的分析在进行分析,得出这样的结论:
    PHP中的__set 和__get 方法只对private和protected 有效,对public,var 无效,是私有变量的延伸,这样理解是最贴切不过的!
    上面这位仁兄的最后一段可以看出.当类变量为private和 protected 时,变量才经过__get(),和__set()处理起效,有了__get()和__set(),类中的私有变量也可象共有变量一样使用echo $a->age; 设置和抛出age的值,私有变量本身不具有此属性(不信去掉其中的__get和__set试试),只有共有变量可以做到,显然可以这样做的原因是得到了__get()和__set()方法的延展!
    #wzm112k 发表于2008-05-14 17:11:44  IP: 222.67.122.*
    有事常联系 wzm112_k@126.com
    #白痴 发表于2008-07-08 11:35:59  IP: 123.185.9.*
    楼主脑子进水了!
    PHP能用+链接字符串吗?
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 小秘密