[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: isset(), array_key_exists(), __isset()
Страницы: 1, 2, 3
Invis1ble
Всем привет.
Пока что для начала хотелось бы спросить ваше видение ситуации, что по-вашему должен возвращать __isset(), когда значение запрашиваемого "свойства" равно null и почему? Такой вот простенький, на первый взгляд, вопрос smile.gif
Я считаю, что, исходя из названия метода, а также, потому что метод вызывается при isset(), поведение должно быть такое же как и у isset(), а именно - возвращаться должно false.
Я понимаю, что реализация вполне себе может зависеть от конкретных задач, просто интересно, какое по вашему мнению поведение более логично.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

GET
Спасибо, как-то не использовал раньше. :)

Немного меняя пример с оффсайта:
http://docs.php.net/manual/ru/language.oop5.overloading.php

class a
{
public function __isset($name)
{
$aaa=NULL;
return isset($$name);
}
}


$a=new a;
$bool=$a->__isset('aaa');
echo gettype($bool).': '.(($bool===true)?'true':'false');//boolean: false


Я тоже предположил, что false.

Вроде так и есть?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Invis1ble
Цитата
Вроде так и есть?

Не совсем понял вопроса :) Реализация может быть любой.
Типичный пример выглядит как-то так:
class Container {
protected $_data = [];
public function __isset($name) {
return isset($this->_data[$name]);
}
// сеттер, геттер и пр.
}

$container = new Container;
var_dump(isset($container->foo));


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
Цитата
а именно - возвращаться должно false.

ну почему бы и нет

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
Цитата (Игорь_Vasinsky @ 22.01.2014 - 05:14)
Цитата
а именно - возвращаться должно false.

ну почему бы и нет

есть мнение (не моё, а вполне уважаемого разработчика), что не должно smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
откуда?
public bool SolrDocument::__isset ( string $fieldName )

http://us1.php.net/manual/ru/solrdocument.isset.php

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
Цитата (Игорь_Vasinsky @ 22.01.2014 - 05:20)
откуда?
public bool SolrDocument::__isset ( string $fieldName )

http://us1.php.net/manual/ru/solrdocument.isset.php

что именно ты этим хотел сказать?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
одноименный метод из оф мануала - пример возвращаемого значения

такое вот попалось тоже

public function __isset($dt) {
return isset($this->data[$dt]);
}


в принципе логично возвращать bool так же как и сам isset

но есть одноимённые методы которые ничего не возвращают, т.е. void

в друпале тоже bool возвращается http://drupalcontrib.org/api/drupal/contri...%3A%3A__isset/7



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
Игорь_Vasinsky
если ты о типе boolean - то никто и не спорит, вопрос в том, что возвращать для null-значения - false (как ведет себя isset) или true (поведение array_key_exists).

UPD. Да, как я и подумал, ты о boolean (сообщение выше отредактировано после моего ответа).

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
а... ну null это null , возвращать true , значение же есть

т.е. если рассмотреть простой пример

$data = null;


переменная $data инициализирована?

ответ: да - он инициализирована.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
Цитата (Игорь_Vasinsky @ 22.01.2014 - 05:29)
а... ну null это null , возвращать true , значение же есть

т.е. если рассмотреть простой пример

$data = null;


переменная $data инициализирована?

ответ: да - он инициализирована.

Свернутый текст
$data = null;
var_dump(isset($data)); // false


user posted image


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
ну я своё мнение написал.

если бы ты тупо по примеру isset() хотел сделать - то топик бы не создавал.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ZSH
Игорь, что выдаст?
$data = null;var_dump(isset($data))

по логике при null значении должно бы возвращать false, хотя все зависит от реализации __isset(), например если в методе инициализировать свойство по каким-либо условиям, то возвращать результат инициализации,
Invis1ble
Цитата
если бы ты тупо по примеру isset() хотел сделать - то топик бы не создавал.

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

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
чтоб путаницы не было - возвращай так же fasle

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.