s.w*_*dit 2 php parameters function
假设我们有一些对象
$a = new stdClass;
$a->b = 7;
$a->c = 'o';
$a->d = array(1,2,3);
Run Code Online (Sandbox Code Playgroud)
此外,我们还有一个函数,它可以处理对象的某些属性(例如b和d[1]).
我的问题:我的函数应该接受整个对象作为参数,如:
function some($a) {
var_dump($a->b);
var_dump($a->d[1]);
}
some($a);
Run Code Online (Sandbox Code Playgroud)
或仅接受某些字段,例如:
function some($b, $d) {
var_dump($b);
var_dump($d);
}
some($a->b, $a->d[1]);
Run Code Online (Sandbox Code Playgroud)
实际上无论是$a对象还是数组.
请记住,默认情况下对象是通过引用传递的,因此如果传递整个对象,则可以根据需要在函数内更改对象值.
如果按值传递某些属性(如示例中所示),则必须返回一些内容,然后如果需要更改对象属性,则必须从外部将其应用于对象.当然,您始终可以将属性本身作为引用传递.
无论如何,我会使用第一种方法(传递整个对象),因为它更具可读性,并且如果您以后需要添加属性则更具可扩展性.内存影响很小,因为只复制指向对象的指针,而不是您需要的每个属性的值.
我相信第一个选择是要走的路.
function some($a) {
var_dump($a->b);
var_dump($a->d[1]);
}
some($a);
Run Code Online (Sandbox Code Playgroud)
因为随着时间的推移,您将需要该对象/数组的其他部分,您将不得不修改函数和您创建它们的调用.因此function some()可以是一个全局函数并以其他方式使用,您可以添加以后的语句,修改函数而无需在任何地方进行修改.
function some($a, $param1 = 1){
if($param1 == 1){
var_dump($a->c);
var_dump($a->d[2]);
} else {
var_dump($a->b);
var_dump($a->d[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5454 次 |
| 最近记录: |