2016-11-11 11 views
0

私はRuneScape hiscoreイメージ作成者とお付き合いしています。人々はフォーラムのプロフィールで署名のためにこれらを使用する傾向があります。PHPのプライベート変数は、定義されていても「未定義」です

コードの一部を再加工しているうちに、私はそれを壊しました。私は取得しています:

Undefined variable: exp in /assets/user.php on line 8 Fatal error: Cannot access empty property in /assets/user.php on line 8

しかし、変数が偶数ライン8上ではありません(私はそれはそれは空白をトリミングとは何かだと仮定します)。

は、ここで私は$名前のエラーを得ていたが、私は機能のグローバル$名を使用していなかったので、それはだった

<?php 

class User { 

public static $names = ["Overall", "Attack", "Defence", "Strength", "Hitpoints", "Ranged", "Prayer", "Magic", "Cooking", 
"Woodcutting", "Fletching", "Fishing", "Firemaking", "Crafting", "Smithing", "Mining","Herblore", "Agility", "Thieving", "Slayer", 
"Farming", "Runecrafting", "Hunter", "Construction", "Summoning","Dungeoneering", "Divination", "Invention"]; 

private $user; 
private $mySkills = []; 
private $exp = []; 

public function __construct($result) { 
    $array = explode(",", $result); 
    $id = 0; 
    $arrId = 1; 
    while($arrId < count($result)) { 
     $this->$mySkills[$id] = $array[$arrId++]; 
     $temp = explode(" ", $array[$arrId++]); 
     $this->$exp[$id++] = $array[0]; 
    } 
} 

public function getTotalXp() { 
    return $this->$exp[0]; 
} 

public function getLevel($skill) { 
    global $names; 
    for ($x = 0; $x <= count($names); $x++) { 
     if(strcasecmp($skill, $names[$x]) == 0) { 
      return $this->$mySkills[$x]; 
     } 
    } 
    return 0; 
} 

public function getExp($skill) { 
    global $names; 
    for ($x = 0; $x <= count($names); $x++) { 
     if(strcasecmp($skill, $names[$x]) == 0) { 
      return $this->$exp[$x]; 
     } 
    } 
    return 0; 
} 
} 
?> 

私User.phpがファイルです。

+1

'$この - > $ mySkills'と' $これは - > $ exp'は__wrong__構文 –

+1

...と書きは、あなたの'$ this-> mySkills'、' $ this-> exp'などのオブジェクトのプロパティ – SergeyLebedev

答えて

2

誤った構文を使用しています。

使用$this->variableNameない$this->$variableName

すなわち変更return $this->$exp[0];return $this->exp[0];

+0

私の配列のインデックス0の未定義のインデックスエラーが表示されます。それらはコンストラクタに設定する必要がありますが、設定されていることを確認するにはどうすればよいでしょうか? – Jesse

+0

Userクラスのインスタンスを作成した後、getterメソッドを使用して何かが設定されているかどうかを確認します。 – Daniel

+0

設定されていないことを示しています。クラスのインスタンスで動作するように、コンストラクタ内の変数をどのように設定する必要がありますか?インスタンスは '$ user = new User($ result);'で、mySkills/expはコンストラクタで設定する必要がありますが、そうではありません。私は 'echo 'Setting'を追加しました。 $ id。 'to'。 $ array [$ arrId] 'をコンストラクタに渡すと、ページに何も表示されません。 – Jesse

関連する問題