PHP 的 getter

2021-03-30 14:33:04 +08:00
 eecjimmy
<?php

/**
 * Class Person
 */
class Person
{
    public function getName1()
    {
        static $name = false;
        if ($name === false) {
            $name = "张三";
        }
        return $name;
    }

    private $_name = false;

    public function getName2()
    {
        if ($this->_name === false) {
            $this->_name = "张三";
        }
        return $this->_name;
    }
}

在不考虑其他情况下,getName1getName2可有区别??

2098 次点击
所在节点    PHP
9 条回复
JKeita
2021-03-30 15:07:17 +08:00
第一种情况,很可能被人喷。
eason1874
2021-03-30 15:12:41 +08:00
getName2 是设为内部值,内部其他方法还是可以改的,重新实例化 Person 也会重置它。

getName1 是把值存起来了,改不了了,就算你重新实例化 Person 也改不了了。
zpfhbyx
2021-03-30 15:12:44 +08:00
@JKeita 不会被人喷。。估计会被人打。。
InternetExplorer
2021-03-30 15:19:43 +08:00
第一种会增加以后找 bug 的时间
FaceBug
2021-03-30 15:20:57 +08:00
getName1

直接 return '张三'就好了,整一堆没用的活儿
FreeEx
2021-03-30 15:26:03 +08:00
有种 95 年咖啡的味道
CodeCodeStudy
2021-03-30 15:30:11 +08:00
函数内部的 static 就是个黑箱子,外面是看不到里面的,而且函数退出后该 static 变量依然存在。
Rache1
2021-03-30 17:47:41 +08:00
一个属于实例,一个属于全局
CODEWEA
2021-03-30 19:00:39 +08:00
变量属于函数,变量属于类

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766500

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX