是否应避免在OOP中尽可能多地使用方法中的传递参数?

Sta*_*arx 6 php oop

这是一个场景

class page {
     public $name;
     public $title;

     public function showhead() {
           return "<head><title>".$this->title."</title></head>";
     }
}
$mypage = new page;
$mypage->title = "My Page title";
$mypage->showhead();
Run Code Online (Sandbox Code Playgroud)

和另一种情况

class page {
     public $name;
     public function showhead($title) {
           return "<head><title>".$title."</title></head>";
     }
}
$mypage = new page;
$mypage->showhead("My Page title");
Run Code Online (Sandbox Code Playgroud)

在这些方法中,哪个更好,哪个应该避免?为什么?

spi*_*non 8

我想这取决于你是否再次需要这个头衔.如果你这样做,那么建立存储和检索属性.如果您只需要一次,那么请使用method参数.


Art*_*cto 5

传递参数之间总是存在一些紧张关系(单独或在不可变的聚合类型中,PHP中并不存在)并将它们存储在某处(无论是类属性,全局,等等).OOP的一个好处是,您可以将状态存储在对象中并从封装中受益(防止许多意外覆盖数据),同时避免使用变量污染符号表.使用这些可变对象有其自己的一组问题,特别是如果我们进入多线程编程,但这在PHP中是一个较小的问题.

在您的特定情况下,我认为将标题存储在对象中会更好.正如In silico所说,它似乎属于page,并且最重要的是你可以做以下事情:

$page = new page;
$page->setTitle("whatever");
...
function doStuff($page) {
    ...
    $page->showhead();
}
Run Code Online (Sandbox Code Playgroud)

然后你不必$page与标题一起传递.