codrilla
5.04.2013 - 12:28
Почему так не работает:
private $imgPath = '/photo/magazine/';
private $imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath;
А так работает:
private $imgPath = '/photo/magazine/';
private $imgFullPath;
private function __construct() {
$this->imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath;
}
Потому, что объявление свойств не может иметь реализации. Тем более использовать $this в объявленном свойстве бессмысленно, так как еще не существует экземпляра объекта. Для этого есть конструктор, в котором выполняются все необходимые операции и вычисления для придания первоначального вида.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
<?
class classTest {
private $imgPath = '/photo/magazine/';
private $imgFullPath;
function __construct() {
$this->imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath;
echo $this->imgFullPath;
}
}
$obj = new classTest();
?>
это у тебя в классе?
_____________
codrilla
5.04.2013 - 13:50
Цитата (sign63 @ 5.04.2013 - 12:48) |
<? class classTest { private $imgPath = '/photo/magazine/'; private $imgFullPath; function __construct() { $this->imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath; echo $this->imgFullPath; } } $obj = new classTest(); ?>
это у тебя в классе?
|
Естественно в классе. Причём то, как вы написали, будет работать. А вот так
<?
class classTest {
private $imgPath = '/photo/magazine/';
private $imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath;
function __construct() {
echo $this->imgFullPath;
}
}
$obj = new classTest();
будет выдавать ошибку
На сколько я понял $this не работает вне функции!
_____________
class classTest {
private $d;
$this->d = 'xcv';
function __construct() {
echo $this->d;
}
}
$obj = new classTest();
?>
вот пример
_____________
codrilla
5.04.2013 - 14:44
Цитата (sign63 @ 5.04.2013 - 13:06) |
class classTest { private $d; $this->d = 'xcv'; function __construct() { echo $this->d; } } $obj = new classTest(); ?>
вот пример |
Естественно ваш пример работать не будет) Но в моём случае дело не в этом, потому что такой код
<?
class classTest {
private $imgPath = '/photo/magazine/';
private $imgFullPath = $_SERVER['DOCUMENT_ROOT'].'/photo/magazine/';
function __construct() {
echo $this->imgFullPath;
}
}
$obj = new classTest();
тоже выдаст ошибку
Проблема, как я и описал в заголовке именно с $_SERVER['DOCUMENT_ROOT']
Michael
5.04.2013 - 14:50
codrilla, прочти в доках
первый абзац
_____________
There never was a struggle in the soul of a good man that was not hard
codrilla
5.04.2013 - 14:54
Цитата (Michael @ 5.04.2013 - 13:50) |
codrilla, прочти в доках первый абзац |
Логично. Собственно я так и думал и тему можно было закрывать уже после поста T1grOK. Всем спасибо.
Короче ток в функцию) или так:
<?
class classTest {
private $imgPath = '/photo/magazine/';
function __construct($test) {
echo $test . $this->imgPath;
}
}
$obj = new classTest($_SERVER['DOCUMENT_ROOT']);
?>
_____________
codrilla
5.04.2013 - 15:01
Скорее вот так
class classTest {
private $imgPath = '/photo/magazine/';
private $imgFullPath;
private function __construct() {
$this->imgFullPath = $_SERVER['DOCUMENT_ROOT'].$this->imgPath;
}
}
Но тут конечно дело вкуса