Php 如何设置方法';将默认参数设置为类成员
我在一个php类中有这个:Php 如何设置方法';将默认参数设置为类成员,php,oop,class,class-design,Php,Oop,Class,Class Design,我在一个php类中有这个: $this->ID = $user_id; public function getUserFiles($id = $this->ID) { } // error here 但很明显,我是不允许以这种方式使用财产的。那么我该如何声明方法参数的默认值应该是ID属性的值呢 一定有比这更好的方法: $this->ID = $user_id; public function getUserFiles($id = '') { $id = ($id
$this->ID = $user_id;
public function getUserFiles($id = $this->ID) { } // error here
但很明显,我是不允许以这种方式使用财产的。那么我该如何声明方法参数的默认值应该是ID属性的值呢
一定有比这更好的方法:
$this->ID = $user_id;
public function getUserFiles($id = '') {
$id = ($id == '') ? $this->ID : $id;
}
在这种情况下,我通常使用null:
public function getUserFiles($id = null)
{
if ($id === null) {
$id = $this->id;
}
// ...
}
假设(出于任何原因和设计),在一个方法中,在参数默认情况下,我们只想使用一个属性,那么我也会像Alex一样:
public function methodABC($param = NULL) {
if ( $param === NULL ) {
$param = $this->attributeUVW;
}
...$param...
}
…下面是要使用的完整代码(我的2美分):
…打印:
X类
“1234”
“5678”
这门课让我很困惑。如果实例具有一个用户ID的属性,那么理想情况下,该实例应该绑定到单个用户。在什么时候我会对用户5采取行动,并期望获得用户8的文件?这感觉很不直观,而且,如果我可以这样做的话,在正确的OOP方面是不合逻辑的。@erisco这是一个有趣的观点。我认为该方法将默认为当前用户,但可以为其他用户重用相同的方法。但我想我还是在按程序思考。您是否建议更好的方法是为不同的用户创建另一个对象实例?我不知道您的总体设计,但从中可以推断,是的,我建议每个用户有一个实例。当您说“重用相同的方法”时,这就是您通过拥有多个实例来实现的,因为它们都有相同的可用方法。
<?php
class MyClass
{
public $attributeUVW;
function __construct() {
$this->attributeUVW = 1234;
}
public function methodABC($param = NULL) {
if ( $param === NULL ) {
$param = $this->attributeUVW;
}
echo '<p>"'.$param.'"</p>'."\n";
}
}
echo '<html>'."\n";
echo '<body>'."\n";
echo '<h1>class X</h1>'."\n";
$x = new MyClass;
$x->methodABC();
$x->methodABC(5678);
echo '</body>'."\n";
echo '</html>'."\n";
?>