blockquote>$this->jobManager->updateJob( $jobs, $data);
Вы говорите PHP:
"В классе
blockquote>$this
посмотрите в объектеjobManager
и запустить методupdateJob
с этими переменными .... "Но в [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);
Существуют различные другие нюансы относительно методов установки значений в классах, я не собираюсь идти над всеми ними, это будет зависеть от того, что происходит в вашем более широком проекте.
Мой отдел изменил его имя трижды за прошлые пять лет, таким образом, мы все рады, что кто-то отказался использовать пространства имен с организационными именами...
Наши пространства имен организованы названиями проекта. Допускающий повторное использование материал помещается в Toolbox
пространство имен. Возможно, немного сырой, но это работает вполне хорошо до сих пор.
Я - разработчик.NET, и я всегда использую организационное пространство имен проекта (com.bolidian.projectspace), потому что оно гарантирует уникальность.
Я использую организацию, за которой следует продукт, например, Acme.Crm. При группировании классов вместе в подпространстве имен всегда используйте множественное число или действие, чтобы оно не могло конфликтовать с классом. например
Я следую соглашению Microsoft и не пишу аббревиатуры с заглавной буквы, например, Crm вместо CRM, Sql вместо SQL - но это больше личное предпочтение.