Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 参数与成员变量_Oop_Variables_Private - Fatal编程技术网

Oop 参数与成员变量

Oop 参数与成员变量,oop,variables,private,Oop,Variables,Private,我最近一直在使用其他人的代码,我意识到这个人在私有变量和方法参数方面与我有着非常不同的理念。我通常认为只有在以下情况下才应使用私有变量: 需要存储该变量,以便以后调用 存储在变量中的数据在类中全局使用 当变量需要全局操作时(这与每个类方法读取变量的需要截然不同) 这将大大简化编程。(无可否认,这是含糊不清的,但在许多情况下都必须如此,才能避免把自己画进一个角落) (我承认,上面的许多内容都有点重复,但它们似乎各不相同,值得这样对待…… 这似乎是防止意外更改变量的最有效方法。似乎遵循这些标准将允许

我最近一直在使用其他人的代码,我意识到这个人在私有变量和方法参数方面与我有着非常不同的理念。我通常认为只有在以下情况下才应使用私有变量:

  • 需要存储该变量,以便以后调用
  • 存储在变量中的数据在类中全局使用
  • 当变量需要全局操作时(这与每个类方法读取变量的需要截然不同)
  • 这将大大简化编程。(无可否认,这是含糊不清的,但在许多情况下都必须如此,才能避免把自己画进一个角落)
  • (我承认,上面的许多内容都有点重复,但它们似乎各不相同,值得这样对待……

    这似乎是防止意外更改变量的最有效方法。似乎遵循这些标准将允许最终操纵外部引用(如果类最终被修改的话),从而在将来为您留下更多的选择。这仅仅是一个风格问题(比如一个真正的括号或匈牙利命名惯例),还是我有理由相信这一点?在这种情况下,是否有最佳实践

    编辑
    我认为这需要纠正。我在上面使用了“全局”,实际上我的意思是“全局通过实例方法”,而不是“任何地方的任何东西都可以全局访问”。

    edit2
    要求举例说明:

    class foo
    {
        private $_my_private_variable;
    
        public function __constructor__()
        {
        }
    
        public function useFoo( $variable )
        {
            // This is the line I am wondering about,
            // there does not seem to be a need for storing it.
            $this->_my_private_variable = $variable; 
            $this->_doSometing();
        }
    
        private function _doSomething()
        {
    
            /*
              do something with $this->_my_private_variable.
            */
            // This is the only place _my_private_variable is used.
            echo $this->_my_private_variable;
        }
    }
    
    我会这样做的:

    class foo
    {
    
        public function __constructor__()
        {
        }
    
        public function useFoo( $variable )
        {
            $this->_doSometing( $variable );
        }
    
        private function _doSomething( $passed_variable )
        {
            /*
              do something with the parameter.
            */
            echo $passed_variable;
        }
    }
    

    您应该只在需要变量的时间和地点创建变量,并在完成后处理它们。如果类不需要类级变量来运行,那么它就不需要类级变量。在不需要变量的地方创建变量是非常糟糕的做法。

    我声称这不是一个样式问题,而是一个可读性/可维护性问题。一个变量应该有一个用途,并且只能有一个用途。仅仅因为变量恰好需要相同的类型,就为了不同的目的“回收”变量没有任何意义

    根据您的描述,听起来好像您所使用的其他人的代码正是这样做的,因为您的列表基本上涵盖了所有其他用途。简单地说,它使用私有成员变量作为临时变量,具体取决于具体情况。我这样想对吗?如果是这样的话,代码就是可怕的


    任何给定变量的词法范围和生存期越小,错误使用的可能性就越小,资源处理也就越好。

    拥有成员变量意味着它将保持在方法调用之间需要保持的状态。如果值不需要在两次调用之间存在,那么它没有理由存在于单个调用的范围之外,因此(如果它存在的话)应该是方法本身中的一个变量


    风格总是很难的,一旦你开发了一个风格,你可能会陷入一个有点墨守成规的状态,并且很难理解为什么你所做的可能不是最好的方式。

    我不确定是否有一个明确的最佳实践来使用全局范围的变量而不是总是作为方法参数传递。(关于“私有变量”,我假设您指的是全局范围的变量。)

    使用全局作用域变量是在.NET中实现属性的唯一方法(即使自动属性最终也会使用全局作用域变量,而不是您必须声明自己的变量)


    始终使用方法参数存在一系列争议,因为它完全清楚了值的来源。我不认为它真的有助于阻止方法对基础值进行更改,而且在我看来,它有时会使内容更难阅读。

    我不同意为全局访问或使编程更容易而实现它。通过在不进行任何过滤的情况下全局公开这些内容,将来更难确定访问权限

    通常,类成员应该表示类对象的状态


    它们不是方法参数的临时位置(这就是方法参数的用途)。

    由于对象属性要保持状态,正如其他属性所述,我的策略是默认情况下所有属性都是私有的,除非我有充分的理由公开它们

    如果有必要的话,稍后只需编写一个getter方法(在编写类的开始我也不必考虑),就可以更容易地公开它们。但在公共财产中盘旋以后可能需要重新编写大量代码


    我喜欢保持它的灵活性,同时不必考虑过多的问题。

    班级成员应该是以下任何一个:

    • 类的依赖项
    • 表示类状态的变量
    • 类的一种方法

    • >P>如果你熟悉C++析构函数,我认为答案是简单的。应该为所有成员变量指定一种方法,以便在函数参数不存在时进行析构函数。这就是为什么成员变量通常是一个对象的状态或依赖项,它们的生命周期有某种关系

      嗯,那他在干什么?要求在调用方法之前设置对象数据,其中所述数据仅用于该方法且仅与单个调用相关?如果是的话,是的,那太愚蠢了。如果没有,请澄清!好吧,所有的数据都是以某种方式正确设置的。例如,在一个地方,信息是在构造函数中定义的,但它可以(同样容易)作为参数传递。他的使用似乎并不完全荒谬,但似乎离最佳实践相差很远。请给出相关代码的具体示例。非常感谢。我想是的。喜欢你的最后一段。但是,就性能而言,循环使用变量a