猿问

请问下php类中定义变量和变量传参哪个更好?

    function function a($lyc1,$lyc2,$lyc3){
                  $a = $lyc1;
                  $b = $lyc2;
                  $c = $lyc3;
                }

    function function b(){
                  $a = $this->$lyc1;
                  $b = $this->$lyc2;
                  $c = $this->$lyc3;
                }
                
                

请问下传参好还是在类中定义$lyc1,$lyc2,$lyc3好?

因为我一个方法中要调用几个函数,并且每个函数都要传几个参数,感觉不好看,

所以想换成方法b这样,但是不知道方法a和方法b哪个效率更好。

由于我对原理不是很懂,但又想知道哪个更优,请大佬们解释一波原理。

牛魔王的故事
浏览 680回答 4
4回答

浮云间

其实这个不是效率上的问题,因为一定程度上,你很难体现出效率的区别。你的意思是定义成属性来访问是不是会更好。 一个方法中要调用几个函数,并且每个函数都要传几个参数,感觉不好看。 那你就要想了,这几个函数所调用的几个参数,出镜率有多高。如果你一个2000行的类,如果$lyc1只出现了一次,它适合定义成属性吗?显然不太好,因为它是属于这个函数的,而这个类跟他关系不大;也可以从这个属性存在的意义去考虑。 说得粗俗点,一般我们把这个类里通用的变量定义成属性。好处是,在这之上可以区别public,protected和private来做访问控制;以及考虑是否使用static静态属性,等等... 但是不是把所有的参数都扔到前面当属性 可以看一些设计模式的内容。

神不在的星期二

除了楼上说的出镜率的问题,还需要注意: 函数参数(最好少于2个) 限制函数参数个数极其重要,这样测试你的函数容易点。有超过3个可选参数参数导致一个爆炸式组合增长,你会有成吨独立参数情形要测试。 无参数是理想情况。1个或2个都可以,最好避免3个。再多就需要加固了。通常如果你的函数有超过两个参数,说明他要处理的事太多了。 如果必须要传入很多数据,建议封装一个高级别对象作为参数。 坏: function createMenu(string $title, string $body, string $buttonText, bool $cancellable): void { // ... } 好: class MenuConfig { public $title; public $body; public $buttonText; public $cancellable = false; } $config = new MenuConfig(); $config->title = 'Foo'; $config->body = 'Bar'; $config->buttonText = 'Baz'; $config->cancellable = true; function createMenu(MenuConfig $config): void { // ... }

白猪掌柜的

感谢两位百忙中回答我的问题!

莫回无

是的,函数一般参数不要超过三个,超过的话最好以一个对象的形式传参,这样比较容易控制函数的稳定性,至于你说的不好看,我觉得无所谓啊,编程的思想就是间接,公用的变量抽象出来变成属性,某个函数用的变量当然是传参进去了。
随时随地看视频慕课网APP
我要回答