资讯专栏INFORMATION COLUMN

【短文】为什么我不在PHP的私有变量用下划线了?

DevWiki / 2357人阅读

摘要:为什么我不在的私有变量用下划线了首先大家都知道在面向对象编程中对修改封闭,对扩展开放的原则所以不对属性,违反原则。

前言

首先这个问题没什么好争论的。类似这种关于代码规范的问题,目前我的观点是:

跟随你面对的团队,跟随你面对的代码块

最近两次被别人问到php私有变量加下划线的问题,由于我开始也是这么做的,但是最后还是没用下划线了。最后想想还是把自己的想法说下吧。

为什么我不在PHP的私有变量用下划线了?

首先: 大家都知道在面向对象编程中对修改封闭,对扩展开放的原则(所以不对属性public,违反原则)。

但是我们的代码总是事与愿违,在某些场景中我们需要对外可修改我们的属性。这里就会经常见到一些getXXXsetXXX之类的成员方法。

然而: 对于getXXXsetXXX,我更习惯于魔术方法__get__set,这两个魔术方法其实就可以运用到这个场景,因为可以统一对外暴露属性,并加以控制,防止的滥用,符合面向对象的思想。

但是: 对外暴露一个加下划线的私有属性,看起来好怪(既然私有的被外部访问了为啥还加下划线)。

// 像这样
(new Demo)->_XXX

所以: 我会在魔术方法__get__set里面统一加下划线,这样这个私有属性就可以不带下划线访问了。

class Demo
{
    public function __set($name = "", $value = "")
    {
        $argu = "_{$this->$name}";
        return $this->$argu = $value;
    }

    public function __get($name = "")
    {
        $argu = "_{$this->$name}";
        return $this->$name;
    }
}

这样: 对外可以暴露的私有属性就没下划线了。

可是: 魔术方法__get__set里面加这个又感觉怪怪的。

结果: 所以干脆不加了。

其次: 想了想也没哪有这个硬性规定。

最后如下:

class Demo
{
    public function __set($name = "", $value = "")
    {
        return $this->$name = $value;
    }

    public function __get($value = "")
    {
        return $this->$value;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28958.html

相关文章

  • PHP经验总结 - 聊聊面向对象

    摘要:例如汽车这个名词可以理解为汽车的总类,但这辆宝马汽车则是一个具体的汽车对象。当在类成员方法内部调用的时候,可以使用伪变量调用当前对象的属性。在面向对象中则被称之为方法。 简述 现在大伙都在讲面向对象编程,但是我们也得先找着一个对象是不?不然怎么面向对象?怎么编程? --- 笑话一则,但是理不亏,要搞P面向对象编程,我们起码要先搞懂对象(还有类)是什么?只有了解它,理解它,你才能驾驭它。...

    lpjustdoit 评论0 收藏0
  • 函数式编程对JavaScript进行断舍离

    摘要:函数式编程一开始我并不理解。渐渐地,我熟练掌握了使用函数式的方法去编程。但是自从学习了函数式编程,我将循环都改成了使用和来实现。只有数据和函数,而且因为函数没有和对象绑定,更加容易复用。在函数式的中,这些问题不复存在。 译者按: 当从业20的JavaScript老司机学会函数式编程时,他扔掉了90%的特性,也不用面向对象了,最后发现了真爱啊!!! 原文: How I rediscov...

    dkzwm 评论0 收藏0
  • PHP编码规范

    摘要:为什么需要编码规范为了提高工作效率,保证开发的有效性和合理性。在文件编码中,选择推荐在换行符中,选择推荐文件命名程序的文件名和目录名都采用有意义的英文命名。最后最后说的是,本规范不是强制,也不是标准。回复编码规范即可。 为什么需要编码规范? 为了提高工作效率,保证开发的有效性和合理性。 为了提高代码可读性和可重复利用性,从而节约沟通成本。 本文主要参考了 PEAR 规范,并进行适当...

    xuweijian 评论0 收藏0
  • 三篇文章带你极速入门php(一)之语法

    摘要:本文适合阅读用户有其他语言基础的童鞋看完语法教程来回顾一下的童鞋传送门,想全面看一下语法推荐这里毫无基础然而天资聪慧颇有慧根不要左顾右看说的就是你,老夫这里有一本从入门到放弃,观你根骨清奇两银子卖给你如何看完本文后你会收获到什么的变量的定义 本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天...

    loostudy 评论0 收藏0
  • php 语言特性学习 (一)

    摘要:后面可以使用任意字符和下划线例如非法的变量在函数中创建的,它的生命周期与函数一样,在主脚本中生成的变量不在函数中不是全局变量,不能在函数中使用它,但是可以用来访问使用变量的名字作为字符串的关键字给程序员一个鼓励呗微信支付宝 1.类的写法 class MyClass { private $id = 19; public function __construct() { ...

    fuyi501 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<