2015-10-03 4 views
1

При попытке получить доступ к методу я определен в классе PHP из другого метода в том же классе, я получаю следующее сообщение об ошибке:PHP класс не распознает this-> метода()

Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in /var/www/. .. /TOC.php on line 57

Раньше я выполнял эти функции вне любого класса, включая их там, где они мне были нужны. Переместив их в один, сначала я подумал, что должен иметь проблему this user, но с экземпляром класса я могу без проблем вызвать метод рендеринга из другого файла. Комментирование строки this->printTreeArray($sectionProjects); устраняет ошибку. Вот мой класс:

<?php 

class TOC{ 

    private function printTreeArray($sectionProjects){ 
     echo "var TOCnodes = [\n"; 

     //Print each section, with another loop to print each one's problems 
     $i = 0; 
     foreach($sectionProjects as $sectionProject){ 
      if($i != 0){ 
       echo ",\n"; 
      } 

      $project = $sectionProject->getProject(); 
      //Get due date for mouseover text 
      $due = $project->getDueDate('F jS, Y h:i A'); 

      $q = new ProjectProblemQuery(); 
      $projectProblems = $q->findByRelProjectId($project->getId()); 

      $pId = $i + 1; 
      echo "{id: $pId, pId: 0, name: \"Project $pId\", title: \"Due: $due\", isParent: true, open: true}"; 

      //Print this section's problem list 
      $probId = 1; 
      foreach($projectProblems as $projectProblem){ 
       echo ",\n"; 

       $nodeId = ($pId * 10) + $j; 

       echo "{id: $nodeId, pId: $pId, name: \"$pId.$probId\", url: \"#\", target: \"_top\"}"; 

       $j++; 
      } 

      $i++; 
     } 
     echo"];\n"; 
    } 

    public function render($section){ 
     if(! $section instanceof Section){ 
      echo "$section is not an instance of Section!"; 
     } 
     else{ 
      echo "<ul id=\"TOCtree\" class=\"ztree\"></ul>\n"; 

      echo "<script type=\"text/javascript\">\n"; 

      $sectionProjects = $section->getSectionProjects(); 

      this->printTreeArray($sectionProjects); 

      echo "$(document).ready(function() { 
        $.fn.zTree.init($(\"#TOCtree\"), setting, TOCnodes); 
       });"; 
      echo "</script>"; 
     } 
    } 


} 

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

ответ

3

Вы должны использовать $this вместо this.

+0

D'oh! Полезно знать, что $ это переменная в классе. Выйдя из Java, я подумал, что это ключевое слово или что-то в этом роде. Благодаря! – B1SeeMore

+0

Ха-ха, никаких проблем! –

Смежные вопросы