php – 私有变量的优点/缺点?

我习惯于将我的所有类变量设为私有,并创建获取/设置它们的“包装器”函数:
class Something{
  private $var;

  function getVar(){
    $return $this->var;
  }

}

$smth = new Something();
echo $smth->getVar();

我看到很多人这样做,所以我最终做了同样的事情:)

以这种方式使用它们是否有任何优势:

class Something{
  public $var;
}
$smth = new Something();
echp $smth->var;

我知道私有意味着你不能直接在课外访问它们,但对我来说,如果变量可以从任何地方访问那么它似乎并不重要……

那么私有变量是否还有其他隐藏的优势?

如果您想将私有变量与公共getter和setter一起使用,或者您只是想将变量直接声明为public,则会因情况而异.

使用“getter”和“setter”可能是好的原因是,如果你想控制某人访问数据的时间.

举个例子,假设你得到了这个:

public setBirthday($date)

然后,您可以确保传递给该setter的日期是有效的生日.

但是,如果您只是将变量声明为公共,则不能

public $birthday;

根据评论.

Also,if you decide change the
internal storage mechanism from a
string containing the date to the
number of seconds since 1/1/1970,you
can still present the date externally
in the same way if you use
encapsulation,but not if you expose
the variables directly. Every piece of
code that touched the internal
variable directly would now be broken.

这意味着如果内部存储机制从1970年1月1日起变为秒数,那么您不必更改“外部API”.原因是你完全控制它:

public getBirthday() {
  // you can still return a string formatted date,even though your 
  // private variable contains number of seconds from 1/1/1970
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧