powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Использование объектов в PHP
63 сообщений из 63, показаны все 3 страниц
Использование объектов в PHP
    #38666166
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, правильно ли я делаю?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$cfg['obj1'] = ['param1'=>'value1', 'param2'=>'value2'];
...

class Class1
{
  private $var1;
  private $var2;
  private $config = $cfg[obj1'];
  function __construct()
  {
    $var1 = dbquery($config['param1'], $config['param2']);
  }
  function method1()
  {
    return $var1['field1'];
  }
}



У меня есть большой код в виде множества различных функций.
Хочу сделать рефакторинг, потому что вызывать последовательно определенные процедуры становится неудобно.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666176
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Подскажите, правильно ли я делаю?
нет
зачем глобальная переменная $cfg ?
нужна классу конфигурация - передайте её через конструктор

а в данном случае параметры нужны не классу, а методу
и передавать методу лучше нормальные именованые параметры, а не массив
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666196
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы хотел держать все конфигурационные переменные в отдельном подключаемом php-файле (мне так удобнее будет подстраивать систему). Поскольку в этом конфигурационном файле указываются пароли, желательно чтобы он был за пределами www-сервера.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666235
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Я бы хотел держать все конфигурационные переменные в отдельном подключаемом php-файле (мне так удобнее будет подстраивать систему). Поскольку в этом конфигурационном файле указываются пароли, желательно чтобы он был за пределами www-сервера.
а кто мешает?
держите где угодно.
читайте этот конфиг, вытаскивайте нужные параметры, присваивайте их нужным переменным и свойствам объектов(через конструктор или сеттеры).
глобальная переменная в данном случае не лучший вариант.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666331
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Я бы хотел держать все конфигурационные переменные в отдельном подключаемом php-файле (мне так удобнее будет подстраивать систему). Поскольку в этом конфигурационном файле указываются пароли, желательно чтобы он был за пределами www-сервера.

желательно чтобы всё что не относиться к стартовому скрипту(а лучше чтоб такой был один) было всё за пределами вебкорня

а нащот класов - что значит верно не верно. (в даном случае на ересь похоже, но...)
смотря от цели...
это же магическая конструкция, которая используеться одним способом...
определись зачем ты пишешь клас, вот на листике возьми и напиши, что не так счас в коде...что плохо. как хочешь, как через класс собираешься этого добиться.


=========
у меня есть код и куча функций, вызывать не удобно..а класс сам будет вызывать типо??? это как?!
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666354
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс нужен:
1. Сейчас код подключаемого модуля выглядит так: в глобальном контексте объявлены переменные с параметрами (в том числе и с паролями) и множество (десятка два) функций, которые делают какую-то одну вещь. Для получения каких-либо данных я вызываю три-четыре функции в определенном порядке. При этом у меня используется CURL и я в держу ссылку на открытую сессию CURL (в процессе выполнения корневого скрипта выполняется несколько CURL-запросов), передавая ее из функции в функцию.
Хотелось бы упростить сопровождение скрипта. Создал объект — в нем все что надо инициализировалось. Закрыл объект — все закрылось.
2. Если вдруг где-то накосячу, наружу могут вылезти значения глобальных переменных, в которых хранятся пароли. Хотелось бы все инкапсулировать, чтобы из объекта «наружу» торчали только интерфейсы, а не потроха.
Правда с этим какая-то странность. Объявляю в классе private-массив, заполняю внутри класса значения. Но когда снаружи делаю print_r($obj), то вижу все private-члены класса.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666386
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Хотелось бы упростить сопровождение скрипта. Создал объект — в нем все что надо инициализировалось. Закрыл объект — все закрылось.
это правильно.

только забудь в этом классе обращения к глобальным переменным
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666425
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Класс нужен:
1. Сейчас код подключаемого модуля выглядит так: в глобальном контексте объявлены переменные с параметрами (в том числе и с паролями) и множество (десятка два) функций, которые делают какую-то одну вещь. Для получения каких-либо данных я вызываю три-четыре функции в определенном порядке. При этом у меня используется CURL и я в держу ссылку на открытую сессию CURL (в процессе выполнения корневого скрипта выполняется несколько CURL-запросов), передавая ее из функции в функцию.
Хотелось бы упростить сопровождение скрипта. Создал объект — в нем все что надо инициализировалось. Закрыл объект — все закрылось.
2. Если вдруг где-то накосячу, наружу могут вылезти значения глобальных переменных, в которых хранятся пароли. Хотелось бы все инкапсулировать, чтобы из объекта «наружу» торчали только интерфейсы, а не потроха.
Правда с этим какая-то странность. Объявляю в классе private-массив, заполняю внутри класса значения. Но когда снаружи делаю print_r($obj), то вижу все private-члены класса.

1. "Для получения каких-либо данных я вызываю три-четыре функции в определенном порядке" - что мешает сделать пятую функцию, которая будет вызывать описанные 4 функции и возвращать из них данные в правильном формате?
2. Насчёт глобальных переменных - их вообще использовать не надо, это факт. Но не из-за бреши в безопасности, а из-за неочевидности кода (функция меняет то, что ей менять не положено по задумке вызывающего кода)
3. разные print_r, var_dump, var_export в принципе сериализируют входные данные. Потому каждая из них будет приводить настолько точную текстовую копию объекта, насколько это возможно (со всеми приватными свойствами). var_export если не ошибаюсь вообще создавалась так, что бы возвращённый код можно было прогнать через eval и получить точную копию переданного объекта.
А вообще... что значит "Если вдруг где-то накосячу, наружу могут вылезти значения глобальных переменных"? Насколько я понимаю, это возможно только в связке с eval (по сути зло), echo, print и т.д. ... Любой другой метод предполагает взлом самого приложения, ну а тогда уже неважно какие там переменные используются... получив доступ к файлам приложения, из них можно вытянуть всё, что угодно :)


А вообще полноценная модульность мне видится именно в использовании ООП. Объекты модулей подгружают в себя объекты разных компонентов, типа работы с базой, разных отображений, специальные компоненты обработки данных, сущности типа пользователе и тому подобное, а уже само приложение подгружает сам объект модуля. При этом все параметры объектов передаются как аргументы конструкторов. При этом не должно быть такого параметра, который возможно было бы не задать в конструкторе, но при этом без которого сам объект остаётся недееспособным, не несущим никакой сути (ну как например объект изображения без ссылки на картинку :) ).
Очень важно - использование интерфейсов. Если модуль предполагает наличие неких универсальных API функций, то он должен реализовать соответствующий интерфейс. Если же эти функции можно определить по-умолчанию не нанеся системе вреда, или же есть некая общая заготовка под модуль, со всеми требуемыми параметрами и тому подобное, то надо такую заготовку определять как абстрактный класс и уже от неё создавать модули (при этом при подгрузке модуля проверять что бы он обязательно реализовывал указанный интерфейс или был наследником указанного класса).

Ну то есть переводить код 1 в 1 с процедурного в ООП нету особого смысла. Он станет, возможно, немного более понятным, но в целом ничего не изменится. Если уже строить объектную модель системы, то делать это надо правильно, сначала до малейших деталей продумал что и как будет устроено и с точным пониманием иерархии классов в приложении.
Судя по вопросу такая подготовка к рефакторингу не была проделана :)
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666436
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Класс нужен:
1. Сейчас код подключаемого модуля выглядит так: в глобальном контексте объявлены переменные с параметрами (в том числе и с паролями) и множество (десятка два) функций, которые делают какую-то одну вещь. Для получения каких-либо данных я вызываю три-четыре функции в определенном порядке. При этом у меня используется CURL и я в держу ссылку на открытую сессию CURL (в процессе выполнения корневого скрипта выполняется несколько CURL-запросов), передавая ее из функции в функцию.
Хотелось бы упростить сопровождение скрипта. Создал объект — в нем все что надо инициализировалось. Закрыл объект — все закрылось.
2. Если вдруг где-то накосячу, наружу могут вылезти значения глобальных переменных, в которых хранятся пароли. Хотелось бы все инкапсулировать, чтобы из объекта «наружу» торчали только интерфейсы, а не потроха.
Правда с этим какая-то странность. Объявляю в классе private-массив, заполняю внутри класса значения. Но когда снаружи делаю print_r($obj), то вижу все private-члены класса.

мдя..код на пхп твой явно не соответсвует текту :) я про прочитаное чтиво где расхвалили опп. отсюда и трудности. хочешь не понимая сделать.

1)
есть много функций, вызываю по очереди 4 из них --- это класика продурного програмирования, на ооп она переноситься без изменений

func1();func2();func3();func4();
->>>
function user_action1(){func1();func2();func3();func4();}

2)чтобы наружу не лезло, не должно быть безконтрольных эхо, и сдесь тебе ооп не помочник.

общее правило такое, есть грубо говоря у тебя два места в коде где есть команда ехо(в коде где первая строка открытие пхп тега, и дальше только пхп и не закрываеться пхп тег)
где ты выдаёшь документ - подходит для сайтов когда отдача штмл странички, для мелких файлов. где ты динамически выдаёшь большой обьём в цикле. хотя первую, можно свести как часный случай второй, - цикл с одной итерацией получиться. но это уже гемор и зря, учитывая что почти всегда надо только первый случай.

3)нащот конфига в одном файле.
сделай лучше сразу заготовку конфига который строиться...
- главный конфиг, который подключает локальный конфиг(суть которого специфика сервера - класика жанра, разработка на локалхосте и работа на хостинге...скорей всего подключение к базе разные настройки)

и клас конфиг, который при инициализации считывает это дело, и имеем интерфейсный метод получения настройки по имени.

4)главное - не пытайся сразу придумать архитектуру идеальную. вот возьми простое, напиши свой класс конфиг под интерфейс

Код: php
1.
2.
3.
iConfig interface {
    public static function get($param_name);
}


задачка со звёздочкой, конфиг, это ведь не единый масив, а масив где есть свои масивы...скажем так, конфигурационная група - скажем настройки для базы данных.
мне нравиться изза практического удобства, это когда я могу так...
Config::get('dbauth.server2.login')
- если представить весь конфиг ввиде масива, то возвратиться елемент
$_config['dbauth']['server2']['login']

- удобсво изза краткости записи, через точку короче чем через набор параметров для гет(разделителем будет запятая пробел доллар), через масив (разделителем получиться кавычка запятая конец строки кавычка)

---
вторым макаром напиши обёртку к глобальным масивам.

Код: php
1.
2.
3.
4.
5.
iGlobal interface {
   public static function post($name);
   public static function post($name);
   public static function post($name);
}
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666443
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
iGlobal interface {
   public static function get($name);
   public static function post($name);
   public static function files($name);
   public static function server($name);
   public static function session($name);

   public static function param($name);
   public static function setOrder($config);//gpfsw = get post files session server
}

метод парам получение глабального значения просматривая масивы по порядку заданым через сетОрдер
методы выше, с явным указанием откуда именно.

задача со звёздочкой, представить свой конфиг как один из суперглобальных масивов, и работать с ним тоже через класс глобал.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666452
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

добавлю ещё )) Надо избегать неявного использования глобальных переменных (значений).
То есть, нельзя предполагать, что когда объект создан, то уже открыто подключение к базе и при том к той, которая нужна.
Объект должен быть полностью самодостаточен. То есть он в конструкторе должен запросить для себя соединение, сохранить его у себя, а потом работать с базой через него. При уничтожении он разумеется должен запросить и разрыв соединения с базой... ну и тому подобное :)

И пускай это даже будет объект (а точнее не "пускай даже", а это скорее должен быть объект), который имеет метод getConnection, при вызове этого метода идёт проверка аргументов и если соответствующее соединение уже создано, то отдаётся ссылка на готовое соединение, иначе отдаётся ссылка на новый ресурс (ну то есть singleton объект). При closeConnection, подсчитывается количество запрошенных соединений, и если равно нулю (после выполнения dec), то соединение закрывается.

Надо рассчитывать на нормальную масштабируемость системы, что бы при переносе данных модуля например в другую базу система могла продолжать функционирование при смене конфига, или же минимальной смене кода (что бы не пришлось начинать мутить новый механизм доступа к базе).


Иначе как я говорил это получится сложный, но очень маленький шаг, который придётся повторять каждых несколько месяцев так как система будет переставать отвечать задуманным требованиям (когда начинал кодить все мои поделки страдали этим недостатком, потому уже научен за те немногие годы работы, хотя иногда и допускаю подобные ошибки в архитектуре, но не такие значимые :) )
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666471
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

это уже один из подходов.

у меня между моделями и базой есть прослойка - класс датабейс
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
iDatabase interface {
   public static function get_connection($name = null);//return mysqli object for connection name = $name, or name = default.

   public static function query($sql,$name = null); return mysqli_result or boolean.

   public static function quote($str);//return quoted string $str
   public static function escape($str);//return escaped string $str
}

то есть я к чему виду, класс базаданных, по сути менеджер подключений, мне важно чтобы все обращения на сервер1 были через одно подключение, а не каждый себе новое создаёт в разных местах кода.

ну и плюс этот клас содержит основные обращения к базе, методы для типичных задач с базой - экранирования, кавычки, запрос, результат, число обработаных строк...
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666499
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запомните это дети и НИКОГОДА больше так не делайте.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666509
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowзапомните это дети и НИКОГОДА больше так не делайте.

Надо написать наверное памятку для некоторых участников форума о правильных и логичных ответах.

1. При возникновении противоречий с написанным сформулируйте свой ответ
2. Убедитесь, что Ваш ответ отвечает на вопросы "как?" и "почему?" (если нет, задание можно считать проваленным и стоит начать по новой)
3. Нажмите на предосмотр и перечитайте получившейся ответ
4. Нажмите на кнопку отправить.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666517
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не понимаю я PHP.

Должно быть что-то вроде такого?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
...
$unifi = new UnifiClass(['username'=>'admin', 'password'=>'password']);
...
print_r($unifi->group_list());
...

class UnifiClass
{

	private $config = ['interface'=>"eth1", 'url'=>"https://10.10.0.250:8443"];
	private $curl;
	private $session;

	function __construct($params = null)
	{
		foreach ($params as $k=>$v)
		{
			$this->config[$k] = $v;
		}
		$this->session = "123";
		return $this->_init();
	}

	function __destruct()
	{
		$this->_close();
		$this->session = null;
		$this->curl = null;
		return true;
	}

	private function _has_curl()
	{
		return in_array('curl', get_loaded_extensions()) ? true : false;
	}

	private function _init()
	{
		if (! $this->_has_curl()) return false;
		$this->curl = curl_init();
		if ($this->curl===false) return false;
		$hdr = fopen("php://memory", "r+");
		//curl_reset($this->curl);
		curl_setopt($this->curl, CURLOPT_SSLVERSION, 3);
		curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($this->curl, CURLOPT_URL, "{$this->config['url']}/login");
		curl_setopt($this->curl, CURLOPT_WRITEHEADER, $hdr);
		curl_setopt($this->curl, CURLOPT_POST, true);
		curl_setopt($this->curl, CURLOPT_POSTFIELDS, http_build_query(array('login'=>'login','username'=>$this->config['username'],'password'=>$this->config['password'])));
		$ret = curl_exec($this->curl);
		if ($ret === false) return "Ошибка запроса: " . curl_error($this->curl);
		rewind($hdr);
		$cookie = array();
		while($line = fgets($hdr))
		{
			$line = rtrim($line);
			$p = strpos($line,': ');
			if ($p !== false)
			{
				if (substr($line,0,$p+2) === 'Set-Cookie: ')
				{
					$line = substr($line,$p+2);
					if (strpos($line,'; ') !== false) $line = substr($line,0,strpos($line,'; '));
					$cookie[] = $line;
				}
			}
		}
		//curl_setopt($this->curl, CURLOPT_WRITEHEADER, null);
		//fclose($hdr);
		//curl_reset($this->curl);
		$this->session = implode('; ',$cookie);
		return true;
	}

	private function _close()
	{
		if (!empty($this->curl)) curl_close($this->curl);
	}

	private function _query($url, $data=null, $options=null)
	{
		if (empty($this->session)) return false;
		//curl_reset($this->curl);
		curl_setopt($this->curl, CURLOPT_SSLVERSION, 3);
		curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($this->curl, CURLOPT_URL, "{$this->config['url']}/api/{$url}");
		curl_setopt($this->curl, CURLOPT_HTTPHEADER, array("Cookie: $this->session"));
		curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($this->curl, CURLOPT_POST, true);
		if (isset($options)) curl_setopt_array($this->curl, $options);
		if (is_array($data))
		{
			if (count($data)==0)
			{
				curl_setopt($unifi_curl, CURLOPT_POSTFIELDS, http_build_query(['json'=>"{}"]));
			}
			else
			{
				$is_assoc = (bool)count(array_filter(array_keys($data), 'is_string'));
				curl_setopt($unifi_curl, CURLOPT_POSTFIELDS, http_build_query(['json'=>json_encode($data)]));
			}
		}
		else
		{
			if (isset($data)) curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data);
		}
		$res = curl_exec($this->curl);
		if ($res !== false)
		{
			$res = json_decode($res,true);
			if ($res['meta']['rc'] == 'ok')
			{
				return $res['data'];
			}
			elseif ($res['meta']['rc'] == 'error')
			{
				return "Ошибка: " . $res['meta']['msg'];
			}
			else
			{
				return "Ошибка: " . $res;
			}
		}
		else
		{
			return "Ошибка запроса: " . curl_error($this->curl);
		}
	}

	function group_list()
	{
		return $this->_query("list/usergroup");
	}

}



Код вроде бы работает, но мне непонятны следующие моменты.

1. Я не могу создать в контексте класса обычные приватные переменные, а не свойства класса? Чтобы можно было использовать $config, а не $this->config.

2. Меня опять таки смущает, что вывод print_r($unifi) выводит все приватные свойства. Нельзя ли сделать так, чтобы приватные свойства/переменные не были видны снаружи?

3. По советам я попробовал использовать интерфейсы. Допустим я создаю interface iUnifi с описаниями методов. Почему при создании методов класса я снова должен указывать у метода те же аргументы, что и в интерфейсе? Ведь метод уже описан в интерфейсе?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666536
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666605
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.print_r($unifi)
это отладочная функция. В отладчике приватные поля ведь хочется видеть?


Alibek B.Почему при создании методов класса я снова должен указывать у метода те же аргументы, что и в интерфейсе? Ведь метод уже описан в интерфейсе?

такова спецификация языка. Собственно полезно видеть глазами имена(и опционально типы) параметров там где тело метода пишется

Alibek B.1. Я не могу создать в контексте класса обычные приватные переменные, а не свойства класса? Чтобы можно было использовать $config, а не $this->config.
смиритесь, тем более при использовании языков где this опционален зачастую его записывают, чтоб явно указать, что обращаемся не к локальной переменной, а члену класса.
использование this в методах инициализации позволяет использовать одно и то же имя для параметра и поля.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666616
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

эээх... пошли разбирать ))
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
	function __construct($params = null)
	{
		foreach ($params as $k=>$v)
		{
			$this->config[$k] = $v;
		}
		$this->session = "123";
		return $this->_init();
	}



Смысл такого конструктора? Через месяц забудете как делали, и не передадите в него одно из требуемых значений... что произойдёт? ошибка ))) На этапе выполнения... то есть работа будет готова, сдана, но при этом нестабильна!!!

Ещё интереснее return $this->_init();. Что этот код должен вернуть при вызове конструктора? :) А ничего, что конструктор объекта может вернуть только соответствующий объект? ). Потому это "ошибка запроса" будет благополучно съедено системой :)

Имеет ли смысл продолжать работу, если инициализация объекта провалилась? Если имеет, то это должно быть учтено в самом объекте, который должен раппортировать о провале (и оставить решение о перезапросе программисту) или же сделать повторный запрос самостоятельно. Если же дальнейшая работа с объектом теряет смысл, то должно быть брошено исключение, на которое будет соответствующая реакция извне.

Весь код перелопачивать не хочу, так как сижу на работе :)

По поводу интерфейсов... ну что можно сказать (по поводу повторения списка аргументов). Перегрузка методов (или как это правильно называется не помню, когда одноимённые методы с разным списком аргументов реализуются по-разному) в php отсутствует, однако для понимания ситуации достаточно вспомнить как это работает в С++ (паскале и где угодно ещё, где есть перегрузка методов). Что, если я определю 2 метода с разным списком аргументов? Надо же как-то указать какой из методов реализуется.
Ну вот в пхп что бы не уходить от стандарта (я так думаю) решили использовать общепринятую систему указания аргументов как в оглавлении, так и в реализации. Тем более что это удобнее, когда видя реализацию методов видишь и список аргументов, а не каждый раз бегаешь в файл с соответствующими оглавлениями (тем более что не всегда понятно где они лежат).


По поводу переменных в контексте класса... Ну тут просто надо почитать про области видимости переменных в php. Насколько я понмю в пхп даже нету такого понятия как контекст выполнения. Там под каждый метод создаётся собственный "контекст" со своим списком переменных, и при этом контексты методов не вкладываются друг в друга как в js. Потому метод связан с объектом, атрибутом которого является, только неявным параметром this переданным в этот метод. Потому из метода нету возможности добраться до свойств объекта как либо окромя указателя $this :) И это правильно, так как все эти "замыкания" это побочные эффекты :) Я точно такой же побочный эффект получил когда писал свой второй шаблонизатор ))) И это отнюдь была не гениальная идея, просто ошибка, которая вылилась в некоторое удобство... Но если на основании шаблонизатора делать новый язык, то такое замыкание приводит к сбоям логики :)
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666618
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ не могу создать в контексте класса обычные приватные переменные, а не свойства класса? Чтобы можно было использовать $config, а не $this->config

как мсье себе это представляет?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666624
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowкак мсье себе это представляет?
как в Java,с++,c#
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666625
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор А ничего, что конструктор объекта может вернуть только соответствующий объект?
вы это
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666627
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилScareCrowкак мсье себе это представляет?
как в Java,с++,c#

тоетсь никак. эпично.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666629
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасколько я понмю в пхп даже нету такого понятия как контекст выполнения. Там под каждый метод создаётся собственный "контекст" со своим списком переменных

ты сделал мой день.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666633
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Потому из метода нету возможности добраться до свойств объекта как либо окромя указателя $this :

жжошь. жги еще, а я пока за попкорном схожу.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666667
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет return в конструкторе принял к сведению.
С остальным пока буду разбираться.

Еще такой вопрос.
Вот у меня есть базовый класс UnifiClass.
В нем могут быть дочерние объекты, UnifiApClass и UnifiStaClass.
Делаю это примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
class UnifiClass
{
	function ap($mac) {
		$obj = new UnifiApClass($this, $mac);
		return $obj;
	}
	function sta($mac) {
		$obj = new UnifiStaClass($this, $mac);
		return $obj;
	}
}
class UnifiApClass
{
	private $unifi;
	private $mac;
	private $data;

	function __construct($unifi, $mac) {
		$this->unifi = $unifi;
		$data = $this->unifi->ap_list(['mac'=>$mac]);
		return true;
	}
	function state() {
		if (empty($this->data)) return false;
		return $this->data['state'];
	}
	function refresh() {
		$this->data = $this->unifi->ap_list(['mac'=>$mac]);
	}
}



В таком виде я могу из основного объекта получить ссылку на дочерний объект и работать уже с его методами и свойствами:
Код: php
1.
2.
3.
$unifi = new UnifiClass;
$ap = $unifi->ap('...');
echo $ap->state();


Допустим нужные мне дополнительные методы я пропишу.
Но в приватном массиве data, который получается в конструкторе и в методе refresh, есть целая куча свойств.
Причем это не фиксированный список, там могут быть дополнительные поля.
Можно ли написать дефолтный метод, который на обращения вида $ap->field1 будет возвращать содержимое $data['field1']?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666672
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

троль 80 лэвэла ))

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
<?php
  class myclass{
    public function __constructor(){
      return "hello";
    }
  }
  echo (new myclass());
?>



Нука ))) Скажи, что у тебя код вернёт?

ScareCrowавторНасколько я понмю в пхп даже нету такого понятия как контекст выполнения. Там под каждый метод создаётся собственный "контекст" со своим списком переменных

ты сделал мой день.

это метод накручивания счётчика сообщений видимо... ну что ж...

ScareCrowавтор Потому из метода нету возможности добраться до свойств объекта как либо окромя указателя $this :

жжошь. жги еще, а я пока за попкорном схожу.

Ну давай :) показывай как добраться до свойства не используя $this:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
  class myclass{
    private $c;
    public function __constructor(){
    }
    public function ggg(){
      //тут код получения $this->c, только без $this :)
    }
  }
?>
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666674
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу давай :) показывай как добраться до свойства не используя $this:

партзадние программеру - найти в доку три способа.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666677
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор<?php
class myclass{
public function __constructor(){
return "hello";
}
}
echo (new myclass());
?>


ДА ДЕТКА!!!! ТЫ СДЕЛАЛ МОЙ ДЕНЬ ДВАЖДЫ!!!!
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666744
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтор<?php
class myclass{
public function __constructor(){
return "hello";
}
}
echo (new myclass());
?>


ДА ДЕТКА!!!! ТЫ СДЕЛАЛ МОЙ ДЕНЬ ДВАЖДЫ!!!!

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
<?php
  class myclass{
    public function __construct(){
      return "hello";
    }
  }
  echo (new myclass());
?>



даааа.... суть вопроса сильно изменилась.
А мне вот стало интересно, если никто не будет отвечать на твой тролинг, тебе станет скучно и ты свалишь с форума, или всё-таки найдёшь выход из ситуации и начнёшь тролить себя?

Если ты не бот, всё ещё жду ответа.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666747
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попкорн уже налрел, извини. может завтра. пока можешь найти ответ в доке.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666748
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надоел
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666755
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowпопкорн уже налрел, извини. может завтра. пока можешь найти ответ в доке.

Правильно!!! Участника форума недостойны лицезреть твой образ и читать твои сообщения ))) Ещё блин время тратить, что бы свой ответ пояснить... нафиг надо ("ты сделал мой день" ДОСТАТОЧНО)!!!

p.s. Так может вообще нефиг тут появляться, чем всякую фигню бессмысленную писать?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666756
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тоесть доку ты читать категорически отказываешся?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666901
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowну тоесть доку ты читать категорически отказываешся?

Нет ) Я категорически уверен, что если кто-то сказал что я не прав, то что бы не быть треплом голословным, он должен пояснить свои выводы и предоставить хоть какие-то подтверждения своих слов.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666929
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class A {

    protected function getMString()
    {
        return 'm';
    }

    public function m1()
    {
        return self::getMString();
    }

    public function m2()
    {
        return A::getMString();
    }

    public function m3()
    {
        return static::getMString();
    }
}


$a = new A();
var_dump($a->m1());
var_dump($a->m3());
var_dump($a->m3());
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666932
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрScareCrowну тоесть доку ты читать категорически отказываешся?

Нет ) Я категорически уверен, что если кто-то сказал что я не прав, то что бы не быть треплом голословным, он должен пояснить свои выводы и предоставить хоть какие-то подтверждения своих слов.

У вас опыта в программировании почти ноль, вы пытаетесь показаться умнее людей у которых очень большой стаж за спиной, но эти потуги весьма смешны, т.к. вы ошибаетесь чуть ли не в каждом своем высказывании. Кому и что вы хотите тут доказать? А главное зачем?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666933
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про людей со стажем, это я даже не про себя
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666950
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрScareCrowну тоесть доку ты читать категорически отказываешся?

Нет ) Я категорически уверен, что если кто-то сказал что я не прав, то что бы не быть треплом голословным, он должен пояснить свои выводы и предоставить хоть какие-то подтверждения своих слов.


авторvoid __construct ([ mixed $args [, $... ]] )

извини, но конструктор не возвращает только что созданный класс. а дальше иди читай доки.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38666955
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class A {

    protected function getMString()
    {
        return 'm';
    }

    public function m1()
    {
        return self::getMString();
    }

    public function m2()
    {
        return A::getMString();
    }

    public function m3()
    {
        return static::getMString();
    }
}


$a = new A();
var_dump($a->m1());
var_dump($a->m3());
var_dump($a->m3());





еще есть рефлекшены, serialize, Closure::bind, преобразование через (array)$object
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667057
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

в твоем коде, все происходит иначе - чем ты думаешь. конструктор ничего не возвращает. а причина ругани в другом
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
class myclass {
  public function __construct() {
    return "hello";
  }
  public function __toString() {
    return 'опа';
  }
}
echo (new myclass());


а так? )
можешь объяснить? если нет, читай доки. ну этоже основы
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667132
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowИзопропилпропущено...

как в Java,с++,c#

тоетсь никак. эпично.

с человеческим синтаксисом - да, никак
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667154
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett , если пример был к моему вопросу, то я его не понял.

Вот есть у меня объект:
Код: php
1.
2.
3.
4.
5.
6.
7.
class Obj1 {
  private $data;
  public function property($name, $value = null) {
    if (!empty($value)) $this->data[$name] = $value;
    return $this->data[$name];
  }
}



Я могу работать с этим объектом так:
Код: php
1.
2.
$obj = new Obj1();
echo $obj->property('title');



А хотел бы объявить метод property таким образом, чтобы он был методом по умолчанию и можно было делать так:
Код: php
1.
2.
$obj = new Obj1();
echo $obj('title');



В COM это возможно. А в PHP так можно сделать?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667198
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class A {

    protected function getMString()
    {
        return 'm';
    }

    public function m1()
    {
        return self::getMString();
    }

    public function m2()
    {
        return A::getMString();
    }

    public function m3()
    {
        return static::getMString();
    }
}


$a = new A();
var_dump($a->m1());
var_dump($a->m3());
var_dump($a->m3());



))) И где тут обращение к свойствам объекта? Тут обращение к статическим атрибутам класса.
попробуй таким же способом (через self, имя класса или static) обратиться к нестатическому свойству (о чём и спрашивал автор, как я его понял, по крайней мере). Потому если я тут и могу быть неправ, то только из-за непонимания вопроса автора... но в своём ответе я уточнил что "Потому из метода нету возможности добраться до свойств объекта как либо окромя указателя $this"

Хотя чё я тут доказываю... Ну если ты так обращаешься к атрибутам объектов - круть. Интересно какова стабильность кода в таком случае.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667215
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowеще есть рефлекшены, serialize, Closure::bind, преобразование через (array)$object

Про рефлекшены читаю, так как никогда не пользовал... А вот пример с Closure::bind или serialize БЕЗ ИСПОЛЬЗОВАНИЯ $this очень интересно увидеть... :) Только давай без разных "ты сделал мой день" и "жжёшь"!!! Иначе тему можно сразу закрывать на том, что ты говоришь не зная!

По сути... как использовать serialize внутри метода объекта, что бы получить доступ к атрибуту объекта не используя $this?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667224
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Не к вашему, там кто то про $this спросил, из чего следует пологать о доступе изнутри.

Программе, где ты там статический метод увидел в моём примере? Это вообще азы пхп, а ты даже тут опростофилился
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667252
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B. Hett , если пример был к моему вопросу, то я его не понял.

Вот есть у меня объект:
Код: php
1.
2.
3.
4.
5.
6.
7.
class Obj1 {
  private $data;
  public function property($name, $value = null) {
    if (!empty($value)) $this->data[$name] = $value;
    return $this->data[$name];
  }
}



Я могу работать с этим объектом так:
Код: php
1.
2.
$obj = new Obj1();
echo $obj->property('title');




__get __set

А хотел бы объявить метод property таким образом, чтобы он был методом по умолчанию и можно было делать так:
Код: php
1.
2.
$obj = new Obj1();
echo $obj('title');



В COM это возможно. А в PHP так можно сделать?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667253
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чета непонятно ответилоась

__get и __set
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667254
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667289
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёр,

в твоем коде, все происходит иначе - чем ты думаешь. конструктор ничего не возвращает. а причина ругани в другом
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
class myclass {
  public function __construct() {
    return "hello";
  }
  public function __toString() {
    return 'опа';
  }
}
echo (new myclass());


а так? )
можешь объяснить? если нет, читай доки. ну этоже основы

echo (new myclass()->__construct());

или как то так.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667309
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow , имплементация ArrayObject это перебор, а вот перезагрузка __get самое то, спасибо.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667334
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёр,

в твоем коде, все происходит иначе - чем ты думаешь. конструктор ничего не возвращает. а причина ругани в другом
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
class myclass {
  public function __construct() {
    return "hello";
  }
  public function __toString() {
    return 'опа';
  }
}
echo (new myclass());


а так? )
можешь объяснить? если нет, читай доки. ну этоже основы

Конструктор прям таки ничего не возвращает? )) И даже указатель на объект?
Разумеется, что скорее всего это придирка к словам :) перефразирую так - конструкция new class() всегда возвращает указатель на объект независимо от результата выполнения конструктора (тут только сомневаюсь по поводу исключений, но хотя если я из конструктора бросил исключение, то в любом случае в нормальном коде объект требуется или не использовать или пересоздать и просто словить исключение и не выполнить действий над объектом - это бред).

Однако снова же, как меняется от этого смысл сказанного? Получит ли автор в итоге от строки new class() вместо объекта class строку или fasle? Вот об этом я и говорил.

P.S. что-то последнее время перестаёт мне нравится этот форум... Участники всё чаще и чаще начинают придираться к мелочам, которые не имеют смысла и часто произносятся мной для упрощения всей модели понимания. Или мне надо было разводить весь этот трёп для автора, что бы пояснить ему, почему return в конструкторе не имеет смысла? или же просто как я сказал "конструктор объекта может вернуть только соответствующий объект", что автор сразу понял и прокомментировал.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667347
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрКонструктор прям таки ничего не возвращает? )) И даже указатель на объект?
блин. ну глянь доку. уже даже ктото тебе приводил. повторюсь
php.netvoid __construct ([ mixed $args [, $... ]] )
видишь VOID. знаешь что это значит? конструктор НЕ ВОЗВРАЩАЕТ указатель.
ни больше не меньше.
указатель на объект ты получаешь с помощью new
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667371
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрКонструктор прям таки ничего не возвращает? )) И даже указатель на объект?
в PHP/JAVA/CPP и т д - не возвращает. new выделяет память, конструктор ее инизиализирует (очень грубо)

в Javascript - действительно возвращает объект (если ничего в коде конструктора не возвращать - неявно возвращается this)
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667376
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettAlibek B.,

Не к вашему, там кто то про $this спросил, из чего следует пологать о доступе изнутри.

Программе, где ты там статический метод увидел в моём примере? Это вообще азы пхп, а ты даже тут опростофилился

блин... да обратись ты через self не к методам, а к переменной и почувствуй разницу. А то спорим ни о чём. Статический - не изменяемый от объекта к объекту. То есть сколько бы объектов класса "A" создано не было, метод m1 в памяти будет храниться в единственном числе (не напоминает ничем static переменную?). А потому обращение self::m1() прокатывает... только из-за того, что метод ОДИН, а не по одному на объект... Попробуй прокрутить то же с атрибутом (переменной) объекта и зацени ругань интерпретатора.

для методов было введено слово static не для того, что бы уточнить у программиста "а надо ли дублировать код метода для каждого объекта", а для того, что бы уточнить "а надо ли передавать первым аргументом ссылку на объект". Вот и всё!!! С переменными класса всё совсем иначе.

А вообще пока... до нескорых встреч... надоели мне эти все "опростофилился" и "ошибаешься чуть бы не в каждом суждении".

P.S. К сожалению модераторы уже не те... если при регистрации на этом форуме я видел как все сообщения строго фильтруются, из них вырезаются оскорбления, пустая болтовня (оффтоп) и тому подобный бред, то сейчас всё совсем иначе. Сейчас даже при отправке сообщения модераторам о явном нарушении правил, троллинге и подобных моментах, модераторы не реагируют никак. Не дают никаких пояснений, что для них это в пределах нормы общения или что-то подобное, а просто игнорируют запросы, хотя они явно указывают на развитие нездравой беседы (то есть когда нормальное здравое обсуждение темы прерывается чьей-то тупой фразкой или сообщение аля "ну вы и дебилы все! Так нельзя делать, так только последние уроды пишут. Иди газоны подстригать с такими руками, а не программировать" (совпадения с реальными фразами или людьми является случайностью)).

Разуверился я в данном форуме... Раньше модераторы следили за своими ветками явно более тщательно.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667407
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёрКонструктор прям таки ничего не возвращает? )) И даже указатель на объект?
блин. ну глянь доку. уже даже ктото тебе приводил. повторюсь
php.netvoid __construct ([ mixed $args [, $... ]] )
видишь VOID. знаешь что это значит? конструктор НЕ ВОЗВРАЩАЕТ указатель.
ни больше не меньше.
указатель на объект ты получаешь с помощью new

Начиная со второго предложения я пояснил свои слова, и описал почему написал именно так. Для ответа на вопрос не разумно объяснять устройство выделения памяти. Или мне заглянуть ещё в низкоуровневые функции выделения памяти? А может ещё упомянуть при описании метода foreach что элементы массива вроде как иду последовательно, но реально они совсем не последовательны, а разбросаны в памяти исходя из результатов вычисления хэш-функции? Ведь иначе скажи я "foreach перебирает последовательно все элементы массива", меня точно также могут прижать, что я не прав!!!

Так всё же, почему, когда я с кем-то согласен, все упускают мелкие ошибки в моих высказываниях (а иногда и некоторые аспекты неправильного понимания), а когда доходит до спора, то придираются к каждой буковке?
Может это от недостатка аргументов? (хотя по отношению к `r u` сомневаюсь, так как редко замечал от него тыканье носом в асфальт кого либо)
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667414
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторперефразирую так - конструкция new class() всегда возвращает указатель на объект независимо от результата выполнения конструктора

есть еще два варианта, когда таки возвращает.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667428
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрПолучит ли автор в итоге от строки new class() вместо объекта class строку или fasle?
echo ждет на входе строку, чтобы вывести её.
ты ей даешь объект.
никто незнает КАК ОДНОЗНАЧНО ОТОБРАЗИТЬ этот объект в строку, чтобы вывести.
от этого и ошибка выполнения.
но стоит добавить магию в виде __toString() как ошибка исчезает. так как теперь есть четкое приведение объекта в строку.

что ты хочешь доказать этим кодом, мне лично непонятно? както подругому должно было это сработать?
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667429
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет это от недостатка аргументов? (хотя по отношению к `r u` сомневаюсь, так как редко замечал от него тыканье носом в асфальт кого либо)


ты начинаешь делать мой день.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667434
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щас мы еще вспомним что конструкторов на самом деле два и будет совсем весело.
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667508
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёрПолучит ли автор в итоге от строки new class() вместо объекта class строку или fasle?
echo ждет на входе строку, чтобы вывести её.
ты ей даешь объект.
никто незнает КАК ОДНОЗНАЧНО ОТОБРАЗИТЬ этот объект в строку, чтобы вывести.
от этого и ошибка выполнения.
но стоит добавить магию в виде __toString() как ошибка исчезает. так как теперь есть четкое приведение объекта в строку.

что ты хочешь доказать этим кодом, мне лично непонятно? както подругому должно было это сработать?

Это можно упустить в принципе )) Спор насчёт конструктора возник после 16150171 . Из-за чего меня "раздражают" эти недофразы ScareCrow. То есть было выражено несогласие с моим суждением, которое я расценил неверно... как уже выяснилось позже, суть была в том, что указатель на объект (выделенную для него память) возвращается не конструктором. Но учитывая что я то ставил ударение на "только", а не на возвращения указателя именно конструктором, подумал что спор идёт насчёт "не только". (и потому я склоняюсь, что впредь реагировать на её такого рода бессмысленные высказывания несогласия не подкреплённые даже описанием несогласия я не буду).

А сработать этот код не должен вообще, Он показывает, что возвращая строку в конструкторе, мы не получим эту строку на выходе из конструкции new Class() (говорил я это именно автору, так как он возвращал строку и ждал её на выходе)
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667513
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрговорил я это именно автору, так как он возвращал строку и ждал её на выходе
ок.
а то спор идет. а кто, что доказать хочет - уже совсем непонятно
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667520
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОн показывает, что возвращая строку в конструкторе, мы не получим эту строку на выходе из конструкции new Class()

как всегда всё совсем не так.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
abstract class MyBase {
    public function __construct () {
        return "Hello, world.";
    }
}
class MyDerived extends MyBase {
    public function __construct () {
        echo parent::__construct();
    }
}
new MyDerived(); // prints "Hello, world."
...
Рейтинг: 0 / 0
Использование объектов в PHP
    #38667535
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
Код: php
1.
new MyDerived(); // prints "Hello, world."




автормы не получим эту строку на выходе из конструкции new Class()

ну если печатать и получить из new - одно и то же - разговаривать не о чем


летели два крокодила, один зелёный, другой на север...
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Использование объектов в PHP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]