PHP依赖属性范围

时间:2015-06-05 09:07:46

标签: php oop dependency-injection scope

在下面的类中,我有两个属性$session$client,这些属性是注入依赖项的属性。在类中,它们被声明为public,但这是包含依赖项的属性的正确范围吗?在这方面,PHP的最佳做法是publicprotected还是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;
  }

}

1 个答案:

答案 0 :(得分:0)

您可以将它们设置为私有(因此它们只能在类本身中进行更改),然后编写getter和setter来访问和注入它们。

private $session;

public function getSession()
{
  return $this->session;
}

public function setSession($new_session)
{
  $this->session = $new_session;
}

这只是一种封装它们的方法,因此改变或查看变量值的唯一方法是调用这些方法。好处是你可以在这些方法中做一些功能,如果变量是公共的,你就不能轻易做到。例如,假设您想确保$new_session是正确的数据类型,您可以在设置之前进行检查。

您也可以将它们设置为受保护,对于此示例,它们的行为相同,但是当您有一个继承您的类并且需要访问这些变量的类时,您希望这样做。

相关问题