Как Вы придумываете названия своих пространств имен?

Что не так
 $this->jobManager->updateJob( $jobs, $data);
blockquote>

Вы говорите PHP:

"В классе $this посмотрите в объекте jobManager и запустить метод updateJob с этими переменными .... "

blockquote>

Но в [119 ] класс, который вы написали:

/**
 * Post manager.
 * @var JobManager
 */
private $jobManager;

Но у вас нигде не установлено jobManager как что-либо. У вас нет функции setter в классе, а также нет другой функции, устанавливающей, что на самом деле является переменной jobManager ... поэтому jobManager никогда не может быть ничем .

То, что вы в действительности делаете, говорит PHP

«В $ this class найдите в пустом пустом пространстве jobManager и запустите метод updateJob с этими переменными. .. "

blockquote>

Это явно не закончится хорошо.

Как это исправить

Вам нужно установить, что такое jobManager, прежде чем вы сможете его использовать, на что ссылается Xatenev . Обычно, когда вы создаете класс или используете метод Setter, если предпочтительнее.

ONE :

public function __construct(EntityManager $entityManager, JobManager $jobManagerVar)
{
    $this->entityManager = $entityManager;
    $this->jobManager = $jobManagerVar;
}

В качестве альтернативы - если метод ->jobManager необходимо определить после , объект IndexController создан; тогда вам нужно использовать класс Setter (потому что jobManager var равно *private*.

Таким образом TWO :

class IndexController extends AbstractActionController
{

...
    public function setJobManager($jobManagerVar){
        $this->jobManager = $jobManagerVar
    }

...
}

И затем, когда вы создаете экземпляр IndexController Вы можете сделать:

// ONE from above:
$theClass = new IndexController($entity,$jobManager);

или

// TWO from above
$theClass = new IndexController($entity);

...

$theClass->setJobManager($jobManger);

Существуют различные другие нюансы относительно методов установки значений в классах, я не собираюсь идти над всеми ними, это будет зависеть от того, что происходит в вашем более широком проекте.

7
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Мой отдел изменил его имя трижды за прошлые пять лет, таким образом, мы все рады, что кто-то отказался использовать пространства имен с организационными именами...

Наши пространства имен организованы названиями проекта. Допускающий повторное использование материал помещается в Toolbox пространство имен. Возможно, немного сырой, но это работает вполне хорошо до сих пор.

6
ответ дан 7 December 2019 в 07:52
поделиться

Я - разработчик.NET, и я всегда использую организационное пространство имен проекта (com.bolidian.projectspace), потому что оно гарантирует уникальность.

1
ответ дан 7 December 2019 в 07:52
поделиться

Я использую организацию, за которой следует продукт, например, Acme.Crm. При группировании классов вместе в подпространстве имен всегда используйте множественное число или действие, чтобы оно не могло конфликтовать с классом. например

  • Acme.Crm.Letters
  • Acme.Crm.Invoicing

Я следую соглашению Microsoft и не пишу аббревиатуры с заглавной буквы, например, Crm вместо CRM, Sql вместо SQL - но это больше личное предпочтение.

0
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: