对比Php和Ruby的getter/setter实现方式

作者:老王

Getter/Setter的用法在Java社区里很常见,比如说在Entity Bean或者DTO中,这东西有的时候很必要,有的时候则乏味得很。Php社区一般都是跟着Java社区的步伐匍匐前进,所以很多人在思想上继承了这样的做法。

先看看PHP中最一般的做法:

class Demo {
      private $name;
      private $age;

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

      public function setName($name) {
          $this->name = $name;
      }

      public function getAge() {
          return $this->$age;
      }

      public function setAge($age) {
          $this->age = $age;
      }
}

当然,因为Php脚本语言的灵活性,借助__call这样的魔术方法,如果你的属性很多,我们可以写得更简便些:

class Demo {
      private $name;
      private $age;

      public function __call($name, $args) {
          if (preg_match(''/^(get|set)(w+)/'', $name, $match)) {
              $firstChar = substr($match[2], 0, 1);
              $lastChars = substr($match[2], 1);
              $this->$attribute = strtolower($firstChar) . $lastChars;

              if (''get'' == $match[1]) {
                  return $this->$attribute;
              } else {
                  $this->$attribute = $args[0];
  &

时间: 2024-10-03 02:00:50

对比Php和Ruby的getter/setter实现方式的相关文章

JavaScript中getter/setter的实现

虽然ES5中为我们提供了Object.defineProperty方法来设置getter与setter,但此原生方法使用起来并不方便,我们何不自己来实现一个类,只要继承该类并遵循一定的规范就可以拥有媲美原生的getter与setter. 现在我们定义以下规范: 取值器跟设值器遵循格式:_xxxGetter/_xxxSetter,xxx代表需要被控制的属性.例如,如果要控制foo属性,则对象需要提供 _fooGetter/_fooSetter方法来作为实际的取值器与控制器,这样我们可以带代码中调用

Javascript自己动手实现getter/setter

虽然ES5中为我们提供了Object.defineProperty方法来设置getter与setter,但此原生方法使用起来并不方便,我们何不自己来实现一个类,只要继承该类并遵循一定的规范就可以拥有媲美原生的getter与setter. 现在我们定义以下规范: 取值器跟设值器遵循格式:_xxxGetter/_xxxSetter,xxx代表需要被控制的属性.例如,如果要控制foo属性,则对象需要提供_fooGetter/_fooSetter方法来作为实际的取值器与控制器,这样我们可以带代码中调用o

实现了一个PHP5的getter/setter基类的代码_php技巧

PHP3.PHP4都拥有类,但它们的类定义的实在很不像样,效率还挺难为情的,但资料上说PHP5重新构造了面向对象的支持,尽管并不是完全面向对象,但也算能拿出来见人了. 昨天晚上闲着无聊便弄起这玩意,感觉PHP5增加的类成员权限关键字挺好,但问题又来了,似乎还没一种方便的方式可以定义字段的getter以及setter,传统的方式是这样定义的: class a {     private $field;     public function get_field() { return $this->

Ruby学习笔记二 使用Ruby实现通过Proxy的方式请求网页

现在很多网站上某些活动都有限制同一IP只能投一票的规定,但是有时候迫于 压迫,又不得不想办法多投几票,以前是采用Apache里的HttpClient来实现这些功 能,日前正在看Ruby,就用它也来玩下: require 'net/http' ##获得网页内容 def query_url(url) return Net::HTTP.get(URI.parse(url)); end #抓取cnproxy上所有的代理列表,并将结果保存到proxy.txt中去 #你可以修改这块代码或者其他的代理服务器列

对比分析iOS延迟执行的4种方式_IOS

最近学习了延迟执行的几种方法,分享一下: 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 一.performSelector方法: 复制代码 代码如下: [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 1.特点: 此方式要求必须在主线程中执行,否则无效. 是一种非阻塞的执行方式, 暂时未找到取

iOS中 动态热修补技术JSPatch 韩俊强的博客

iOS开发者交流群:446310206   所谓动态热修补就是把能够导致app 崩溃的严重bug,提交新版本到appstore 审核速度太慢影响用户使用,这时候就可以利用 JSPatch 可以让你用 JavaScript 书写原生 iOS APP.只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug. 这里就不在赘述优缺点重点看实现! 每日更新关注:http://wei

代码执行的效率

第一个例子 PHP中Getter和Setter的效率(来源reddit) 这个例子比较简单,你可以跳过. 考虑下面的PHP代码:我们可看到,使用Getter/Setter的方式,性能要比直接读写成员变量要差一倍以上. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <?php     //dog_naive.php       class dog {  

ssh2整合 spring 注入对象为空

问题描述 在tomact服务启动之后我在Action里对象set方法 打印出对象 证明是注入进去的 ,, 当我调用Action里面对象的时候 就提示我空指针异常 如果使用getBean 的话是可以得到对象的web.xml <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-val

Python和Ruby两大语言全方位对比

最近在考虑学习一门后端语言,在Ruby和Python直接犹豫,然后自己做了一些对比,希望能帮到有同样问题的你. 一.异同对比选择 1.Python和ruby的相同点: 都强调语法简单,都具有更一般的表达方式.python是缩进,ruby是类basic的表达.都大量减少了符号. 都是动态数据类型.都是有丰富的数据结构. 都具有C语言扩展能力,都具有可移植性,比perl的可移植性更好.也都可以作为嵌入语言. 都是面向对象的语言,都可以作为大项目的开发工具. 都有丰富的库支持. 也有最宽松的版权许可,