Я не уверен, что это тривиальные вопросы, но в классе PHP:
MyClass
class MyClass {
public $var1;
public $var2;
constructor() { ... }
public method1 () {
// Dynamically create an instance variable
$this->var3 = "test"; // Public....?
}
}
Main:
$test = new MyClass();
$test->method1();
echo $test->var3; // Would return "test"
Это работает ?? Как бы мне заставить это работать? Ps. Я написал это быстро, поэтому, пожалуйста, не обращайте внимания на любые ошибки, которые я допустил при настройке класса или вызове методов!
EDIT
Как насчет того, чтобы сделать эти переменные экземпляра, которые я создаю, закрытыми ??
РЕДАКТИРОВАТЬ 2
Спасибо всем за то, что ответили - все правы - я должен был просто проверить это сам, но на следующее утро у меня был экзамен, и во время учебы мне пришла в голову мысль, что я хотел проверить, работает ли это. Люди продолжают утверждать, что это плохой ООП - возможно, но он допускает некоторый элегантный код. Позвольте мне объяснить это немного и посмотреть, если вы все еще так думаете. Вот что я придумал:
//PHP User Model:
class User {
constructor() { ... }
public static find($uid) {
$db->connect(); // Connect to the database
$sql = "SELECT STATEMENT ...WHERE id=$uid LIMIT 1;";
$result = $db->query($sql); // Returns an associative array
$user = new User();
foreach ($result as $key=>$value)
$user->$$key = $value; //Creates a public variable of the key and sets it to value
$db->disconnect();
}
}
//PHP Controller:
function findUser($id) {
$User = User::find($id);
echo $User->name;
echo $User->phone;
//etc...
}
Я мог бы просто поместить его в ассоциативный массив, но я никогда не смогу правильно назвать этот массив чем-то значимым (т. Е. $ User-> data ['name'] ... безобразно.) В любом случае вы должны знать, что в базе данных, поэтому я не совсем понимаю, в чем аргумент, что это сбивает с толку, тем более что вы можете просто изменять объекты дампа для отладки.