Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ООП. Установить свойство класса

244
08 сентября 2006 года
UAS
2.0K / / 19.07.2006
Есть простенький класс:
 
Код:
class any {
  var $root="blabla";
  // ну вот тут разное идёт и  ненужное и т.д.
}
$any=new any;


Так вот проблема: например я хочу установить ещё одно свойство.
Например сделаю я типа что-то типа этого $any->createProp($name_of_new_property).
Т.е. запустив эту команду: $any->createProp("password"); в классе создастя свойство $any->password. Есть ли возможность сделать это не используя eval() или не используя прямое установление свойства? Вот...

И ещё можно ли такое сделать:
 
Код:
class any {
  var $root="";
  function cut() {
    # здесь будет делаться trim, substr и т.д.
 }
}

Т.е напишу я
$any->root->cut();
И чтобы метод cut() проводил операции со свойством $any->root???

Посмотрел документацию.. Ничего похожего не нашёл...:( По идее желательно если бы дали на PHP4 идеи свои, хотя без разницы...
8
08 сентября 2006 года
mfender
3.5K / / 15.06.2005
Новое свойство в объекте создать можно просто: если у тебя его нет - инициализируй его, и оно появится.

 
Код:
$any->password = "asdjkhfkjasdhfkasdj";


и будет полное счастье. Пока объект существует, это поле тоже существует.

А вот со вторым - не можно. Это PHP, а не JavaScript. Методы бывают у объектов. Но, если переменная $any->root - объект и у него есть метод cut(), то он будет работать.
285
08 сентября 2006 года
Romik
479 / / 24.11.2002
В таком виде как ты это хочешь, нельзя
Однако ты можешь использовать метода и массивы (обращение напрямую к членам-данным не шибко элегантно)

Код:
class any{
 private properties;
 
  function __construct(){
    $this->properties = new array();
  }

  function set($propertyName, $value){
    if(isset($this->properies[$propertyName])){
       $this->properies[$propertyName] = $value;
    }else{
       return null; // faild
    }
    return true; //success
  }

  function get($propertyName){
    if(isset($this->properies[$propertyName])){
       return $this->properies[$propertyName];
    }else{
       return null;
    }
  }
 
  function addPropery($properyName){
   if(!isset($this->properies[$propertyName])){
     $this->properties[$propertyName]='';    
   }else{
     return false;
   }
   return true;
  }
   
  function removePropery($properyName){
    if(!isset($this->properies[$propertyName])){
     unset($this->properies[$propertyName]);
    /* Тут можно поюзать array_slice, но так как индексы не участвуют, то необязательно */
    }
   
  }
}
// не тестил, писал только, чтобы показать идею


Ну в дополнение могу сказать, что addProperty можно сделать возвращающей указатель, что упростит работу

Вас такой вариант устроит?
240
08 сентября 2006 года
aks
2.5K / / 14.07.2006
[QUOTE=mfender]Новое свойство в объекте создать можно просто: если у тебя его нет - инициализируй его, и оно появится.

 
Код:
$any->password = "asdjkhfkjasdhfkasdj";

[/QUOTE]
Только развеж это будет ООП уже? =))
285
08 сентября 2006 года
Romik
479 / / 24.11.2002
по поводу вызова несуществующего метода, можно создать класс свойств и обрабатывать в нём вызовы методов, например вот так:
Код:
<?

class property{
 private $parent;
// private $Name;
 private $value;
 
 function __construct(&$parent){
   $this->parent=$parent;
 }
 
 function set($value){
    $this->value = $value;
 }
 
 function get(){
    return $this->value;
 }
 
 function __call($method,$params){
   $this->parent->$method($params);
   
 }
}

class any{
 public $prop;
 
 function __construct(){
    $this->prop = new property($this);
 }
 
 function cut($what){
    echo "The 'cat' was called\n ";
    var_dump($what);
 }
}

$a = new any();
$a->prop->cut();
?>


А вообще mfender прав, я просто забыл о том, что в классах члены-данных тоже создаются автоматом ;)
244
08 сентября 2006 года
UAS
2.0K / / 19.07.2006
Спасибо люди! Почитал я и понял что в ООП ещё лох... Буду усерднее учится!!! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог