|
|
|
| Обьясните пожалуйста что они делают. И если не затруднит приведите пример. Заранее благодарю. | |
|
|
|
|
|
|
|
для: jeans1986
(20.07.2006 в 22:04)
| | Если переменная класса закрыта, то обращаться к ней из вне можно только через открытые методы, для того, чтобы это выглядело так будто это просто открытая переменная, к которой можно непосредственно обращаться и присваивать значения используются методы __set() и __get() класса, которые перехватывают обращения к переменной. Таким образом, можно регистрировать в объекте не существующие переменные и обращаться к ним. Контроль за этой деятельностью реализуется в методах __set() и __get().
<?php
class GetSet
{
// Объявляем закрытый член класса
private $member;
// Объявляем метод __set, позволяющий присваивать значение
// закрытой переменной
function __set($name,$value)
{
// Если передаваемое функции значение $value
// меньше нуля генерируем исключение
if($value<0) $this->member[$name] = 0;
// Если $value больше нуля присваеваем его
// закрытому члену $member
else $this->member[$name] = $value;
}
// Объявляем метод __get, возвращающий значение
// закрытой переменной
function __get($name)
{
return isset($this->member[$name]) ?
$this->member[$name] : 'not set';
}
}
// Объявляем объект класса GetSet
$obj = new GetSet;
// Заносим во внутренние переменные класса значения хитов
$obj->path = 100;
echo $obj->path;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.07.2006 в 10:02)
| | Спасибо за ответ. Но исходя из того примера получается что самой переменной $memeber не присваивается никакое значение, а присваевается масиву $memeber c ключом $name. Вот как раз я этот моент не понял. Если не затруднит обьясните пожалуйста | |
|
|
|
|
|
|
|
для: jeans1986
(21.07.2006 в 10:28)
| | Да так и есть, в массиве $member мы регистрируем переменные, точнее свойства класса, которые могут менять динамически. Однако методы __set() и __get() позволяют ограничить значения и имена таких динамических свойст. Например в приведённом выше классе, нельзя добавлять переменные меньше 0. | |
|
|
|
|
|
|
|
для: cheops
(21.07.2006 в 10:41)
| | как я понял у метода __set() - два параметра - одно имя а второе значение. но если у нас например два сккрытых члена например, private $m1,private $m2. КАК работает в этом случае метод __set() и __пуе(). ЕСЛИ НЕ ТРУДНО ПРИМЕР ПРИВЕДИТЕ. зАРАНЕЕ БЛАГОДАРЮ | |
|
|
|
|
|
|
|
для: jeans1986
(21.07.2006 в 11:13)
| | А как определите, вы можете регистрировать параметры в $m1, можете в $m2, можете в двух сразу... реализация находится полностью в ведении разработчика. | |
|
|
|
|
|
|
|
для: cheops
(21.07.2006 в 23:30)
| | А если я хочу одновременно обоим присвоить разные значения. в таком случае как поступить? | |
|
|
|
|
|
|
|
для: jeans1986
(21.07.2006 в 23:41)
| | Изменить число параметров не удасться, т.е. одновременно не получиться, но можно так настроить методы __get() и __set(), что они будут реагировать на префикс сохраняемого параметра или его значение. Если они удовлетворяют каким-либо свойством - обращаемся к $m1, если нет - $m2. | |
|
|
|