2015-07-15 2 views
0

Мой PHP файл начинается сПочему эта строка ломает мою страницу?

<?php 

$tm = new TeamManager(); 

?> 

<script type="text/javascript"> 
    var team = <?php echo json_encode($tm->GetWholeTeam()); ?>; 
</script> 

, а остальное не читается, по неизвестным причинам. Я сузили его до линии <?php echo json_encode($tm->GetWholeTeam()); ?>, но никаких ошибок не показывает, даже если добавить

error_reporting(-1); 
ini_set('display_errors', 'On'); 

в верхней части сценария. Для справки, мой TeamManager класс определен в

<?php 

// Gets included in functions.php 


final class MySqlInfo 
{ 

    const TEAMTABLENAME = 'mems'; 
    const PROJSTABLENAME = 'projs'; 

    public static function getTeamTableName () 
    { 
     return self::TEAMTABLENAME; 
    } 

    public static function getProjectsTableName () 
    { 
     return self::PROJSTABLENAME; 
    } 
} 

final class MethodResult 
{ 

    public $succeeded; 
    public $message; 

    public function MethodResult ($succeededInit = NULL, $messageInit = NULL) 
    { 
     $this->$succeeded = $succeededInit; 
     $this->$message = $messageInit; 
    } 

} 

final class TeamMember 
{ 
    public $name; // team member name 
    public $title; // team member title 
    public $bio; // team member bio 
    public $sord; // team member sort order 
    public $picfn; // team member profile picture file name 

    public function TeamMember ($name_init, $title_init, $bio_init, $sord_init, $picfn_init) 
    { 
     $this->name = $name_init; 
     $this->title = $title_init; 
     $this->bio = $bio_init; 
     $this->sord = $sord_init; 
     $this->picfn = $picfn_init; 
    } 
} 

final class TeamManager 
{ 

    public function TeamManager () 
    { 
     // .... 
    } 

    public function addMember (TeamMember $M) 
    { 

     $q = "INSERT INTO " . MySqlInfo::TEAMTABLENAME . " (" . implode(',', array($M->name, $M->title, $M->bio, $M->sord, $M->picfn)) . ") VALUES ('" . implode('\',\'', array($_POST['fullname'], $_POST['title'], $_POST['bio'], $_POST['sord'], $targetFileName)) . "')"; 
     //^query for inserting member M to the database 

     if (!$wpdb->query($q)) 
     { 
      return new MethodResult(false, 'Query to insert new team member failed'); 
     } 
     // else 
     return new MethodResult(true, 'Successfully added new member' . $M->name); 
    } 

    public function getWholeTeam () 
    { 
     $q = "SELECT name,title,bio,sord,picfn FROM " . MySqlInfo::TEAMTABLENAME; 
     $teamRows = $wpdb->query($q); 
     return $teamRows; 
    } 
} 

?> 

, но я не получаю никаких ошибок на этой странице, либо. Я также запускаю все через валидатор онлайн PHP и не получаю никаких ошибок. Что дает?

+0

Это, скорее всего, ошибка Javascript, а не ошибка PHP. После загрузки страницы просмотрите источник. Я подозреваю, что команда «var team» инициализирована неправильно. – Kamehameha

ответ

2

Область видимости переменной:

$teamRows = $wpdb->query($q); 
       ^^^^^ 

Это не определено в вашем getWholeTeam() метод (и во всех методах, которые используют его, на самом деле) Вам нужен

global $wpdb; 

внутри.

У вас должно быть AT LEAST получено предупреждение неопределенной переменной на $wpdb и фатальная ошибка для «вызова функции-члена на не-объекте». Это говорит о том, что вы отключили все параметры отладки: вам нужно включить error_logging и display_errors при отладке. Они никогда не должны быть в первую очередь на развитой системе.

+0

Но у меня в 'functions.php' есть' global $ wpdb; require_once 'classes.php'; 'что означает, что' $ wpdb' определяется временем, когда 'classes.php'« вставлен »в' functions.php' - правильно? –

+1

не имеет значения. он не определен в этом методе. вы должны объявить глобальность переменной в каждой функции/методе, в которой вы ее используете. Не существует способа для usercode создать новый суперглобальный, который будет автоматически везде, например $ _GET/_POST –

0

Попробуйте это:

<?php 

$tm = new TeamManager(); 

?> 

<script type="text/javascript"> 
    var team = JSON.parse('<?php echo json_encode($tm->GetWholeTeam()); ?>'); 
</script> 
+0

точно как это что-то меняет? json IS javascript. dumping json_encode вывод в присваивание переменной является абсолютно допустимым ... и на самом деле будет работать даже в старых браузерах, у которых нет прямой поддержки JSON. *. –