Как установить аргумент метода по умолчанию для члена класса - PullRequest
3 голосов
/ 10 февраля 2011

У меня это внутри класса 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;
}

Ответы [ 2 ]

10 голосов
/ 10 февраля 2011

Я обычно использую нуль в этой ситуации:

public function getUserFiles($id = null)
{
    if ($id === null) {
        $id = $this->id;
    }
    // ...
}
0 голосов
/ 08 декабря 2018

Если предположить (по какой-либо причине и дизайну), в методе, в случае параметра по умолчанию, мы просто хотим вместо этого использовать атрибут, чем я бы также сделал это, как Алекс:

public function methodABC($param = NULL) {
    if ( $param === NULL ) {
        $param = $this->attributeUVW;
    }
    ...$param...
    }

...и вот полный код для игры (мои 2 цента):

<?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";

?>

... отпечатки:

<html>
<body>
<h1>class X</h1>
<p>"1234"</p>
<p>"5678"</p>
</body>
</html>
...