
Sergey
16.01.2017
21:02:53

Vadim
16.01.2017
21:03:12
их немного

Aleh
16.01.2017
21:03:17

Google

Aleh
16.01.2017
21:03:25
типа если больше 65535 пропертей?)

Sergey
16.01.2017
21:03:37
то с большой долей вероятностью можно сказать что что-то не так с декомпозицией задачи

Aleh
16.01.2017
21:04:06
это да
но нулы-то

Vadim
16.01.2017
21:04:27
суть в том, что тебе пхп все равно не обещает на 100% дефолтное значение, которое ты ожидаешь

Sergey
16.01.2017
21:04:30
class Poinless
{
private $pointless = null;
}
?
тип вот так?

Vadim
16.01.2017
21:04:35
да

Sergey
16.01.2017
21:04:44
нуууу... это немного... бред но ладно)

Aleh
16.01.2017
21:04:49
senseless
ну в общем да)

Google

Роман
16.01.2017
21:05:09
как-то слишком сложно
Ну так получилось в итоге, is_null не нужен
public function unset_key($key) {
if (array_key_exists($key, $this->config)) {
unset($this->config[$key]);
}
}

Sergey
16.01.2017
21:06:08

Vadim
16.01.2017
21:06:34
тут блин пропертю у класса можно с пустым именем сделать, к которой нельзя обратиться, ничему верить нельзя

Роман
16.01.2017
21:06:44
Конкретно удалить нулл задача не стоит. НО если он будет в конфиге и будет необходимость удалить его, то iiset не сработает.
удалить переменную по ключу*

Aleh
16.01.2017
21:08:12
попробуй взять какую-то реальную задачку и сделать как получиться
а потом порефакторить

Sergey
16.01.2017
21:08:20

Aleh
16.01.2017
21:08:28
например типичный e-commerce

Sergey
16.01.2017
21:08:36
+1

Vadim
16.01.2017
21:08:42

Sergey
16.01.2017
21:08:59
и все будет не так плохо)

Роман
16.01.2017
21:09:11

Aleh
16.01.2017
21:09:22
НЕ РАССКАЗЫВАЙТЕ ЕМУ

Sergey
16.01.2017
21:09:26
))))

Роман
16.01.2017
21:09:50
Я вычислю! ?

Aleh
16.01.2017
21:10:09
@lokin_roman
попробуй взять какую-то реальную задачку и сделать как получиться

Google

Aleh
16.01.2017
21:10:10
а потом порефакторить
например типичный e-commerce

Роман
16.01.2017
21:10:13
В любом случае есть же property_exists(). ?

Vadim
16.01.2017
21:10:51
ох уж эти пустые проперти)))

Роман
16.01.2017
21:11:22
Так зачем мне абстрактные задачи? У меня есть мой же говнокод, который я перевожу в более-менее читаемый вид. У меня есть конфиги в json'ах, нужно удалять переменную по ключу, и там теоретически может быть null, что я делаю не так? ?

Vadim
16.01.2017
21:11:38
а хдебаг его вообще дико выводит

Aleh
16.01.2017
21:12:03
зачем тебе из конфига удалять поля?
задачи они для того, чтобы учиться

Роман
16.01.2017
21:13:17
Это просто key => value хранилище с настройками, там хоть что может быть. Теоретически null'у там делать нечего, но если есть способ обезопасить себя простой функцией то почему бы и нет?

Aleh
16.01.2017
21:13:53
так может типизируй? Сделай так, чтобы там было не хоть что, а все очень конкретное?
чтобы это было не key-value

Роман
16.01.2017
21:14:27
Да, возможно. ??


Роман
16.01.2017
21:21:06
Ещё вопрос, есть метод get_key(), который проверяет наличие ключа в массиве, и есть метод unset_key(), который удаляет ключ, но он сначала проверяет на наличие ключа. Получается снова дублирование кода. Так как нет возможности вернуть корректный ответ из get_key(), так как return null или return false не корректны, так как ключ может принимать такое значение, даже если забыть про null, false это же классический способ вернуть ошибку из метода.
Если нагляднее, то хочу так:
public function get_key($key) {
if (array_key_exists($key, $this->config)) {
return $this->config[$key];
}
throw new Exception("[Config] Key '{$key}' not found.", 1);
}
public function unset_key($key) {
if ($this->get_key($key)) {
unset($this->config[$key]);
}
}
А приходится так:
public function get_key($key) {
if (array_key_exists($key, $this->config)) {
return $this->config[$key];
}
throw new Exception("[Config] Key '{$key}' not found.", 1);
}
public function unset_key($key) {
if (array_key_exists($key, $this->config)) {
unset($this->config[$key]);
}
throw new Exception("[Config] Key '{$key}' not found.", 1);
}
Вот как бы избавиться от дублирования? Как методу unset_key() узнать о том что ключа нету именно от метода get_key()?
Всё, решил задачу. ??


Vadim
17.01.2017
07:40:20
ну и кто так делает, задачу решил, а в чат не написал

Google

$iD
17.01.2017
07:41:14
видимо он понял, что надо сделать hasKey метод
к слову, isset, будет работать быстрей, чем array_key_exists... но это выйгрыш совсем не значительный

Daniel
17.01.2017
07:49:46
O(n)
O(1)

Hell
17.01.2017
07:50:45
задолбало отсутсвие нормальных библиотек логирования для по ха пе

Daniel
17.01.2017
07:50:55
Monolog?
Выйгрыш незначительный, пока n незначительна

Aleh
17.01.2017
07:52:36
да, а что не так с monolog?

Nadirq
17.01.2017
07:53:24
ну может человек не знал про монолог)

Aleh
17.01.2017
07:54:07
O(n)
O(1)
раскрой тему, почему isset/array_key_exists должны иметь разную сложность?

Admin
ERROR: S client not available

F01134H
17.01.2017
08:53:26
?

Nadirq
17.01.2017
08:55:34
:D

Hell
17.01.2017
09:04:49
гуглить я и так умею

dypa
17.01.2017
09:09:12

Роман
17.01.2017
09:19:28
public function get_key($key) {
if ($this->key_exists($key)) {
return $this->config[$key];
}
}
public function unset_key($key) {
if ($this->key_exists($key)) {
unset($this->config[$key]);
}
}
private function key_exists($key) {
if (array_key_exists($key, $this->config)) {
return true;
}
throw new Exception("[Config] Key '{$key}' not found.", 1);
return false;
}

Vadim
17.01.2017
09:19:52
:)

$iD
17.01.2017
09:20:15
нужно удалить throw

Google

Vadim
17.01.2017
09:20:29
тут, конечно, можно развести холивар, что экзепшены для флоуконтроля юзать не круто...

$iD
17.01.2017
09:20:36
+

Vadim
17.01.2017
09:20:54
ведь экзепшен это исключительная ситуация, когда все, пришел пиздец

Роман
17.01.2017
09:21:47
А как тогда во внешнем коде узнать что ключа нету? Не пойму как правильно эксепшенами пользоваться.
Да, понял что не вернётся false никогда, потому что поток прерывается.

$iD
17.01.2017
09:22:30
false - нет ключа

Роман
17.01.2017
09:22:50
Но с другой стороны, если прервётся стандартный поток, то на и false не нужен?
Обработаем эксепшин и всё.
В общем, пойду дальше книжку читать. ?

Jan
17.01.2017
09:25:26
@lokin_roman если без ключа невозможна дальнейшая работа — исключение. Если можно что-то дальше делать — просто false.

Vadim
17.01.2017
10:11:02
ну метод же называется key_exists, который из названия ну никак не должен кидать экзепшены, а просто рассказывать, есть или нет ключ, а уже дальше пользователь этого метода может кидать что захочет, если это обусловлено ситуацией

Aleh
17.01.2017
10:32:15
так а ключа со значением false быть не может?

Роман
17.01.2017
10:45:52

Vadim
17.01.2017
10:49:37
да, но это должен решать тот, кто запрашивает, а метод с таким названием должен просто рассказывать, есть или нет
тебе скажут спасибо те, кто после тебя подддерживать будут

Роман
17.01.2017
10:50:09
Если у кого есть образцовый класс для загрузки конфига из JSON/XML, покажите его. Я посмотрю на то КАК это должно быть. ?
Ну или не конфига а вообще key => value.

Vadim
17.01.2017
10:51:33
как минимум где-то в компонентах симфони или в ларавеле есть такой класс)

Роман
17.01.2017
11:05:08
Отличные у них названия, главное что отличаются ?:
JsonEncode.php
JsonEncoder.php

Alex
17.01.2017
11:07:49
как минимум где-то в компонентах симфони или в ларавеле есть такой класс)
Ларавель:
/**
* Get an item from an array using "dot" notation.
*
* @param array $array
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function get($array, $key, $default = null)
{
if (is_null($key)) {
return $array;
}
if (isset($array[$key])) {
return $array[$key];
}
foreach (explode('.', $key) as $segment) {
if (! is_array($array) || ! array_key_exists($segment, $array)) {
return value($default);
}
$array = $array[$segment];
}
return $array;
}