Вычисления при инициализации свойств класса
Как известно, при инициализации свойств класса мы не можем использовать какие-либо вычисления:
class A {
var $a = 2*2; // --неверно
var $b = "st"."r"; // --неверно
var $c = $_SERVER['REMOTE_ADDR']; // --неверно
}
Однако, есть способ обойти это:
define("A_a", 2*2);
define("A_b", "st"."r");
define("A_c", $_SERVER['REMOTE_ADDR']);
class A {
var $a = A_a;
var $b = A_b;
var $c = A_c;
}
Только что придумал, собснно.
UPD: Это позволяет при наследовании – не заботится о parent::__construct(); в конструкторе потомка. Полезно, если вы и так используете константы для свойств класса (напр. DEFAULT_a, DEFAULT_b)
февраля 13, 2009 в 13:01
class A { public $a = null; public $b = null; public $c = null; function __construct(){ $this->a = 2*2; $this->b = "st"."r"; $this->c = $_SERVER['REMOTE_ADDR']; } }февраля 14, 2009 в 00:05
мм да, так я делаю в C++.
Забыл написать, что это – для наследования – не нужно помнить про
parent::__construct();февраля 27, 2009 в 11:12
брр, хорошо что я мало пишу на ООП php
p.s. А зачем свойства делать константами?
июня 25, 2009 в 09:47
Да, нормальная реализация, как я сразу об этом не подумал, приходилось более сложные схемы использовать.
ноября 9, 2009 в 14:26
В принципе все понятно, я все таки остаюсь верен php
Для меня это тоже вариант. Спасибо за этот пост, весьма полезный