ООП. Установить свойство класса
Код:
class any {
var $root="blabla";
// ну вот тут разное идёт и ненужное и т.д.
}
$any=new 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 и т.д.
}
}
var $root="";
function cut() {
# здесь будет делаться trim, substr и т.д.
}
}
Т.е напишу я
$any->root->cut();
И чтобы метод cut() проводил операции со свойством $any->root???
Посмотрел документацию.. Ничего похожего не нашёл...:( По идее желательно если бы дали на PHP4 идеи свои, хотя без разницы...
Код:
$any->password = "asdjkhfkjasdhfkasdj";
и будет полное счастье. Пока объект существует, это поле тоже существует.
А вот со вторым - не можно. Это PHP, а не JavaScript. Методы бывают у объектов. Но, если переменная $any->root - объект и у него есть метод cut(), то он будет работать.
Однако ты можешь использовать метода и массивы (обращение напрямую к членам-данным не шибко элегантно)
Код:
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, но так как индексы не участвуют, то необязательно */
}
}
}
// не тестил, писал только, чтобы показать идею
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 можно сделать возвращающей указатель, что упростит работу
Вас такой вариант устроит?
Код:
$any->password = "asdjkhfkjasdhfkasdj";
[/QUOTE]
Только развеж это будет ООП уже? =))
Код:
<?
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();
?>
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 прав, я просто забыл о том, что в классах члены-данных тоже создаются автоматом ;)
Спасибо люди! Почитал я и понял что в ООП ещё лох... Буду усерднее учится!!! :)