当前位置: 首页 > news >正文

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

前言

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

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

最近两次被别人问到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;
    }
}
复制代码

最后

如果有写的不对的地方,欢迎大家指正,THX~

相关文章:

  • angular-路由与导航部分梳理
  • C# Web Api一个小例子
  • 数塔-动态规划-ccf
  • 【Matplotlib】利用Python进行绘图
  • 单体架构风格
  • CSS outline和border区别
  • python学习之老男孩python全栈第九期_day009之文件操作总结
  • 复杂性研究相关论文
  • 我与Linux系统的藕断丝连
  • 老板让我十分钟上手nx-admin
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Flutter Android端启动白屏
  • 九、一级缓存、二级缓存
  • zabbix监控
  • centos7 go ENV 部署
  • canvas绘制圆角头像
  • JavaScript中的对象个人分享
  • js操作时间(持续更新)
  • SAP云平台里Global Account和Sub Account的关系
  • Service Worker
  • 多线程 start 和 run 方法到底有什么区别?
  • 浮现式设计
  • 机器学习学习笔记一
  • 简单基于spring的redis配置(单机和集群模式)
  • 简析gRPC client 连接管理
  • 探索 JS 中的模块化
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • UI设计初学者应该如何入门?
  • #Lua:Lua调用C++生成的DLL库
  • (1)Android开发优化---------UI优化
  • (33)STM32——485实验笔记
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)共用体union的用法举例
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (TOJ2804)Even? Odd?
  • (二十三)Flask之高频面试点
  • (附源码)php新闻发布平台 毕业设计 141646
  • (十六)串口UART
  • (一)Dubbo快速入门、介绍、使用
  • (转) 深度模型优化性能 调参
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Core 中的路径问题
  • .Net Memory Profiler的使用举例
  • .NET MVC之AOP
  • .NET 依赖注入和配置系统
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET成年了,然后呢?
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .project文件
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [acm算法学习] 后缀数组SA
  • [Android Pro] AndroidX重构和映射
  • [C++]C++类基本语法