|
|
|
| Приветствую всех участников форума.
Начал практиковать ООП и столкнулся с одной ошибкой.
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in ... on line 5
<?
class mysql_base
{
public $connect;
$connect = mysql_connect('localhost', 'root', 'pas');
}
Вопрос: можно ли без использования метода получить в обьекте свойство connect ? | |
|
|
|
|
|
|
|
для: Старший товарищ
(16.01.2011 в 22:27)
| |
<?php
$obj = new mysql_base;
$obj->connect = mysql_connect('localhost', 'root', 'pas');
|
Обошлись без метода.
Может, вам нужно это?
<?php
class mysql_base
{
public $connect;
public function __construct($server, $login, $password)
{
$this->connect = mysql_connect($server, $login, $password);
}
}
$obj = new mysql_base('localhost', 'root', 'pas');
var_dump($obj->connect); // Ресурс либо false, если подключение не удалось.
|
| |
|
|
|
|
|
|
|
для: neadekvat
(16.01.2011 в 22:37)
| | Да это то что нужно. Только непонятно почему объявить член класса с каким либо значением можно в теле самого класса, а результат какой-либо функции необходимо присваивать через конструктор. | |
|
|
|
|
|
|
|
для: Starshii Tovarish
(19.01.2011 в 20:44)
| | Не совсем верное утверждение.
Члены класса объявляются вне методов для того, чтобы быть доступными из любой точки класса (созданная в методе переменная будет являться локальной относительно этого конкретного метода, и обратится к ней будет трудновато).
А оперировать с членами класса можно из любого метода.. Тот же класс, что я представил выше, можно переписать иначе - создать не конструктор, а обычный метод. Просто потом придется объявить новый объект класса и отдельно вызвать новый метод.
Удобнее в данном случаи работать с конструктором. | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2011 в 21:12)
| | Благодарю за ответ но понимания всё равно нет.
>(созданная в методе переменная будет являться локальной относительно этого конкретного метода, и обратится к ней будет трудновато).
>А оперировать с членами класса можно из любого метода.
Имелось ввиду что оперировать с переменными внутри класса созданными в методе можно но это будет сложновато ? :)
Короче говоря в ООП так делать нельзя:
class db_base
{
public $db_connect = mysql_connect("localhost", "root", "");
public $memory_current = memory_get_usage();
} | |
|
|
|
|
|
|
|
для: Starshii Tovarish
(22.01.2011 в 14:43)
| | Как вы показали - нельзя.
Я имел в виду, что если некое свойство должно быть в нескольких методах, то его лучше сделать членом класса.
Вот смотрите (ситуация надумана и не дай бог вообще так в реальном проекте делать):
<?php
class some()
{
public function __construct()
{
$name = 'Вася';
$this->echo_name($name);
}
protected function echo_name($name)
{
echo $name;
}
}
class some()
{
protected $name = null;
public function __construct()
{
$this->name = 'Вася';
$this->echo_name();
}
protected function echo_name()
{
echo $this->name;
}
}
|
В первом случаи вам придется постоянно передавать необходимые параметры между методами класса - это утомительно.
Во втором случаи вам достаточно просто вызвать метод, не передавая никаких аргументов - ибо ему уже будет доступно нужное свойство.
Только я не помню, к чему это вообще говорю.. | |
|
|
|
|
|
|
|
для: Starshii Tovarish
(22.01.2011 в 14:43)
| | >Имелось ввиду что оперировать с переменными внутри класса созданными в методе можно но это будет сложновато ? :)
Переменные не бывают внутри класса.
Внутри класса бываютт члены.
Переменные бывают внутри функции (как частный случай - внутри метода)
>Короче говоря в ООП так делать нельзя:
в каком ООП?
>class db_base
>{
>public $db_connect = mysql_connect("localhost", "root", "");
>public $memory_current = memory_get_usage();
>}
в контексте какого из методов должен выполниться этот код? | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2011 в 14:57)
| | Примерно то, о чем говорит товарищ, в некоторых реализациях ООП возможно. В js, например.
Но там, к сожалению, нет классов. О которых говорит товарищ... Да и метод на самом деле есть, только неявный.
Это я так, треплюсь размышляю ) | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2011 в 14:57)
| | Вопрос стоял что как можно получить член с результатом выполнения какой-либо функции не используя ни методов, ни конструкторов и даже не аксессоров в классе.
Повторю пример:
class cls
{
public $i;
$i = 0;
}
Для таких тривиальных вещей можно использовать статические члены:
class cls
{
static private $one = 1;
static private $two = 2;
}
Но как с этими данными оперировать в дальнейшем, если нужно например сложить self::$one и self::$two и записать значение куда нибудь ?
Вторую книгу читаю, не слова об этом ! | |
|
|
|