[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: А можно ли сделать так?
Renden
Привет, собственно пример:

class System {
public $content;
public $errors = array();

function someMethod() {}
}


$sys = new System();
$sys->errors[] = "Какая-то ошибка";
$sys->errors[] = "Еще ошибка";

$sys->content .= "Контент 1";
$sys->content .= "Контент 2";


Вопрос в том (возможно глупый, уж простите), можно ли не писать "[]" или "." чтоб класс автоматом создавал массив или делел конкатацию строк?



Спустя 5 минут, 25 секунд (30.06.2011 - 11:20) Oyeme написал(а):
В данном случаи тогда будет не свойства класса а метод в котором происходит добавления значений в массив.
Например:

$sys->content('Контент 1');

-----------------

public function content($data){
$this->content[] = $data;
}

Спустя 2 минуты, 36 секунд (30.06.2011 - 11:23) Renden написал(а):
Oyeme
С методом то все понятно, но просто хотелось бы писать в стандартном виде:

$что-то = чему-то; //т.е без скобок, нельзя никак, там через __construct или еще как методу свойству сказать что он массив например?

Спустя 13 минут, 42 секунды (30.06.2011 - 11:36) sharki написал(а):
Всегда это удивляло, почему бы не запустить свой код, и не посмотреть содержимое массива ? smile.gif

Спустя 4 минуты, 27 секунд (30.06.2011 - 11:41) Oyeme написал(а):
class System {
public $content;
public $errors = array();

public function content($data){
$this->content[] = $data;
}

public function __set( $name,$value )
{
switch ( $name )
{
case 'contentF':
return $this->content[] = $value;

break;
}
}
}


$sys = new System();
$sys->contentF ="test1";
$sys->contentF ="test2";

print_r($sys->content);

Спустя 6 минут, 44 секунды (30.06.2011 - 11:47) T1grOK написал(а):
Ну, а чтобы не путаться с разными свойствами можно еще добавить __get

class System {
public $_content = '';
public $_errors = array();

function __set($name, $val){

if($name=='errors'){
$this->_errors[] = $val;
}
if($name=='content'){
$this->_content .= $val;
}
}


function __get($name){

if($name=='errors'){
return $this->_errors;
}
if($name=='content'){
return $this->_content;
}
}

function someMethod() {}

}


$sys = new System();
$sys->errors = "Какая-то ошибка";
$sys->errors = "Еще ошибка";

$sys->content = "Контент 1";
$sys->content = "Контент 2";

Спустя 2 минуты, 36 секунд (30.06.2011 - 11:50) T1grOK написал(а):
По идее это все можно реализовать с помощью интерфейсов. Но к сожалению я не знаю как, потому что опыта с ними практически нет.

Спустя 7 минут, 57 секунд (30.06.2011 - 11:58) sharki написал(а):
T1grOK
Интерфейс лишь описывает св-ва и метода класса, НЕ РЕАЛИЗУЯ их

Спустя 6 минут, 50 секунд (30.06.2011 - 12:05) linker написал(а):
class System
{
private $content = '';
private $errors = array();

public function __set($name, $value)
{
if ($name == 'errors')
$this->errors[] = $value;
else
if
($name == 'content')
$this->content .= $value;
}

public function __get($name)
{
if ($name == 'errors')
return $this->errors;
else
if
($name == 'content')
return $this->content;
}

}


$object = new System();
$object->errors = 'Hello';
print_r($object->errors);
$object->content = 'Hello';
$object->content = ' world';
echo $object->content;

Спустя 10 минут, 35 секунд (30.06.2011 - 12:15) T1grOK написал(а):
linker - Это работать не будет. __set() и __get вызывается для неопределенного свойства.

Спустя 2 минуты, 9 секунд (30.06.2011 - 12:18) linker написал(а):
T1grOK
А ты проверь сначала. __set() и __get() вызываются для всего, что не является public. Тоже касается и __call().

Спустя 2 часа, 36 минут, 56 секунд (30.06.2011 - 14:54) Renden написал(а):
Спасибо всем, отходил, сдавал город, в 4 раз, наконец сдал smile.gif
И еще вопросик про правописание можно ли писать свойство класа с большой буквы или заглавными?(понятное дело что можно физичеси, а по стандартам как правильнее?)

Спустя 44 минуты (30.06.2011 - 15:38) linker написал(а):
Renden
Это уже ты сам решаешь, как тебе удобнее.

Спустя 2 часа, 20 минут, 37 секунд (30.06.2011 - 17:59) Oyeme написал(а):
Название класса большими
Название методов малеьнькими
Назавание свойств малеьнькими

П.С большими - заглаваная только

Спустя 17 часов, 35 минут, 10 секунд (1.07.2011 - 11:34) Guest написал(а):
Цитата (Oyeme @ 30.06.2011 - 14:59)
Название класса большими
Название методов малеьнькими
Назавание свойств малеьнькими

название класса не большими, а с заглавной буквы)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.