2015-06-03 2 views
0

Я работаю над классом, и я пытаюсь вывести его с помощью json_encode, но переменная не изменится.PHP: изменение переменной внутри класса

PHP:

<?php 

class person { 
    public $person = ""; 
} 
class name { 
    public $lastname = ""; 
    public $firstname = ""; 
} 

$user = new person(); 
$user->person = new name(); 

$user->lastname = "Foo"; 
$user->firstname = "Bar"; 

echo json_encode($user); 
?> 

ВЫВОД:

{ "человек": { "фамилия": "", "Имя": ""}, "фамилия": "Foo", "Имя": "Бар"}

ЗАПЛАНИРОВАННЫЕ:

{ "человек": { "Lastname ": Foo" "," firstname ":" Bar "}}

Может кто-нибудь объяснить мне, почему это не изменится?

ответ

2

Чтобы задать имя $user «s не вы должны называть:

$user->person->firstname = "Foo"; 
$user->person->lastname = "Bar"; 

В качестве альтернативы можно также установить переменные name перед установкой его в person

$name = new name(); 
$name->firstname = "Foo"; 
$name->lastname = "Bar"; 

$user->person = $name; 

EDIT

Если вам нужен только один класс, и вы хотите реплицировать ожидаемый результат:

class person { 
    public $firstname; 
    public $lastname; 
} 

$user = new person(); 

$user->firstname = "Foo"; 
$user->lastname = "Bar"; 

echo json_encode(array('person' => $user)); 
+1

Или он мог бы просто расширить класс, если он действительно хочет использовать '$ user-> firstname', который имеет больше смысла семантически. – Andrew

+0

есть ли способ сократить класс с тем же выходом? как я просто хочу поставить их в 1 класс? –

+0

Да, вы можете просто иметь один класс 'person' с двумя переменными' $ firstname' и '$ lastname' – Ankh

0

Изменить эти линии

$user->lastname = "Foo"; 
$user->firstname = "Bar"; 

К

$user->person->lastname = "Foo"; 
$user->person->firstname = "Bar"; 

Вы никогда не приписывать эти свойства, поэтому они пусты в строке. Вместо этого вы назначаете их user, а не name, и именно поэтому вы видите их после кодированного name.
Строго говоря, это не должно позволять работать, и вы должны получить предупреждение СТРОГО.

+0

есть ли способ сократить класс с тем же выходом? как я просто хочу поставить их в 1 класс? –

0

Класс name присваивается $user->person.

Итак, когда вы назначая значения firesname и lastname в вашем name классе, вы должны использовать ниже код

$user->person->lastname="Foo"; 
$user->person->firstname="Bar"; 

или

firstname и lastname переменная в name классе считают новые данные

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