Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ООП свойства свойств
 
 автор: buratinkin   (30.06.2009 в 12:20)   письмо автору
 
 

Добрый день.
Подскажите, как создавать свойства объекта на "лету"? По аналогии с "переменными переменных".

На примере:

$array = array('name1','name2','name2');


Как создать свойства с именами значений массива. Т.е. $Object->name1 и т.д.

  Ответить  
 
 автор: Root   (30.06.2009 в 13:48)   письмо автору
 
   для: buratinkin   (30.06.2009 в 12:20)
 

<?php
$obj 
= new stdClass();
foreach( array( 
'name1','name2' ) as $name )
{
    
$obj->$name null;
}
var_dump($obj);
?>


UPD.
Подумав:
<?php
$array 
= array( 'name1','name2' );
$obj = (object) array_fill_keys($arraynull);
var_dump($obj);
?>

  Ответить  
 
 автор: Рома   (30.06.2009 в 14:05)   письмо автору
 
   для: Root   (30.06.2009 в 13:48)
 

.

  Ответить  
 
 автор: Buratinkin   (30.06.2009 в 18:06)   письмо автору
 
   для: Root   (30.06.2009 в 13:48)
 

А в самом объекте? Т.е. чтобы какой-либо метод создавал новые свойства объекта с именами значений массива.


<?php
public function method_name()
{
$names = array( 'name1','name2' ); 
/* ??? что-то вроде $this->$names[0] */
}
?>

  Ответить  
 
 автор: golovdinov   (30.06.2009 в 18:30)   письмо автору
 
   для: Buratinkin   (30.06.2009 в 18:06)
 

В PHP нельзя создавать реальные свойства "на лету", но можно воспользоваться волшебными методами __set и __get.

  Ответить  
 
 автор: Buratinkin   (30.06.2009 в 18:45)   письмо автору
 
   для: golovdinov   (30.06.2009 в 18:30)
 

А $MysqliResult->fetch_object()->column_name не из этой "оперы"?

  Ответить  
 
 автор: golovdinov   (30.06.2009 в 18:52)   письмо автору
 
   для: Buratinkin   (30.06.2009 в 18:45)
 

Без понятия. Все-равно это реализовано в модуле PHP, на C скорее всего.

  Ответить  
 
 автор: Root   (30.06.2009 в 19:09)   письмо автору
 
   для: golovdinov   (30.06.2009 в 18:30)
 

>В PHP нельзя создавать реальные свойства "на лету", но можно воспользоваться волшебными методами __set и __get.

Ну-ну..

В php как раз свойства в классе объявлять не обязательно.
<?php
$obj 
= new stdClass();
$obj->test 'test';
echo 
$obj->test;
?>

и никакого public $test в stdClass'e нет.
А методами __set, __get можно пользоваться чтобы, например, чтобы избежать создания динамических свойств.

  Ответить  
 
 автор: golovdinov   (30.06.2009 в 21:33)   письмо автору
 
   для: Root   (30.06.2009 в 19:09)
 

Опять же, реализация этого класса лежит в недрах ядра PHP (даже не PEAR). Если бы мне дали работать с кодом, где подобное реализовано, я бы повесился.

  Ответить  
 
 автор: root   (30.06.2009 в 22:25)   письмо автору
 
   для: golovdinov   (30.06.2009 в 21:33)
 

с любыми классами тоже самое.

  Ответить  
 
 автор: Root   (30.06.2009 в 19:10)   письмо автору
 
   для: Buratinkin   (30.06.2009 в 18:06)
 

>А в самом объекте? Т.е. чтобы какой-либо метод создавал новые свойства объекта с именами значений массива.

Неужели так тяжело самому попробовать?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования