Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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
Php 如何设置方法';将默认参数设置为类成员_Php_Oop_Class_Class Design - Fatal编程技术网

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

我在一个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 : $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";

?>