在下面的类中,我有两个属性$session
和$client
,这些属性是注入依赖项的属性。在类中,它们被声明为public
,但这是包含依赖项的属性的正确范围吗?在这方面,PHP的最佳做法是public
,protected
还是private
?
<?php
/**
* @file
* Dummy example class.
*/
namespace App\My\Namespace;
use App\My\Namespace\SessionInterface;
use GuzzleHttp\ClientInterface;
/**
* Class DummyClass
* @package App\My\Namespace
*/
class DummyClass {
/**
* @var \App\My\Namespace\SessionInterface
*/
public $session;
/**
* GuzzleHttp\ClientInterface;
*/
public $client;
/**
* @param \SessionInterface $session
* @param \GuzzleHttp\ClientInterface $client
*/
public function __construct(
SessionInterface $session,
ClientInterface $client
) {
$this->session = $session;
$this->client = $client;
}
}
答案 0 :(得分:0)
您可以将它们设置为私有(因此它们只能在类本身中进行更改),然后编写getter和setter来访问和注入它们。
private $session;
public function getSession()
{
return $this->session;
}
public function setSession($new_session)
{
$this->session = $new_session;
}
这只是一种封装它们的方法,因此改变或查看变量值的唯一方法是调用这些方法。好处是你可以在这些方法中做一些功能,如果变量是公共的,你就不能轻易做到。例如,假设您想确保$new_session
是正确的数据类型,您可以在设置之前进行检查。
您也可以将它们设置为受保护,对于此示例,它们的行为相同,但是当您有一个继承您的类并且需要访问这些变量的类时,您希望这样做。