PHP依赖属性作用域
在下面的类中,我有两个属性,PHP依赖属性作用域,php,oop,dependency-injection,scope,Php,Oop,Dependency Injection,Scope,在下面的类中,我有两个属性,$session和$client,它们是将依赖项注入其中的属性。在类中,它们被声明为public,但这是包含依赖项的属性的正确范围吗?PHP在这方面的最佳实践是什么,public、protected或private <?php /** * @file * Dummy example class. */ namespace App\My\Namespace; use App\My\Namespace\SessionInterface; use Guzzl
$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;
}
}
您可以将它们设置为private(因此它们只能在类本身中更改),然后编写getter和setter来访问和注入它们
private $session;
public function getSession()
{
return $this->session;
}
public function setSession($new_session)
{
$this->session = $new_session;
}
这只是封装它们的一种方法,因此改变或查看变量值的唯一方法就是调用这些方法。这样做的好处是,您可以在这些方法中实现一些功能,而如果变量是公共的,则无法轻松实现这些功能。例如,假设您想确保$new\u session
是正确的数据类型,您可以在设置它之前进行检查
您也可以将它们设置为protected,在本例中,它们的行为相同,但是当您有一个继承您的类并且需要访问这些变量的类时,您需要这样做。将两者都设置为protected
并写入getter。