негодования пост

Статус
В этой теме нельзя размещать новые ответы.

dimagolov

Новичок
dr-sm, а причем тут пример на JS, который к тому же по-разному работает в разных браузерах?
 

dr-sm

Новичок
у меня поразному неработает )
и хотя в js можно бросить исключение из туСтринг,
это можно сделать невсегда, я тоже полон негодования.
 

Fortop

Новичок
zerkms
который, к тому же, не содержит стектрейс, жутко необходимый мне для помещения в логи и дальнейшего изучения.
Омг, что значит не содержит? А если посмотреть внимательнее код, что я привел?

zerkms
что следует из того, что до 5.2 он использовался только совместо с echo и print?
Из этого следует что Ваши познания крайне недостаточны, как для того, кто претендует быть php-разработчиком.
Ни [m]echo[/m], ни [m]print[/m] не являются функциями и их механизм работы отличается.

zerkms
"судя по всему" или точно? сударь, вы уж определитесь
Сударь, Вы ожидаете что я стоял со свечкой? Разочарую - со свечкой не стоял, исходники не смотрел.
Но моих знаний и опыта 1 года работы с PHP более чем достаточно для понимания ситуации без конкретного копания в исходниках.
Если Ваш опыт Вам этого не позволяет, то сочувствую Вам.

zerkms
в мануале явно этого не описано. свои эротические фантазии по этому поводу и самозаключениями можешь поделиться с комитетом спортлото.
Точно? Вы абсолютно уверены, что это не описано в мануале?
Странно, почему он с Вами в этом не согласен?
http://php.net/manual/en/migration52.incompatible.php

И если Ваши знания не позволили Вам это прочитать, то предлагаю начать с букваря.
Когда выучите буквы тогда будете писать о моих эротических фантазиях.

Changed __toString() to be called wherever applicable. The magic method __toString() will now be called in a string context, that is, anywhere an object is used as a string. The fallback of returning a string that contains the object identifier was dropped in PHP 5.2.0. It became problematic because an object identifier cannot be considered unique. This change will mean that your application is flawed if you have relied on the object identifier as a return value. An attempt to use that value as a string will now result in a catchable fatal error.

PHP:
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error:  Object of class foo could
   not be converted to string in filename on line n */
?>
Even with __toString(), objects cannot be used as array indices or keys. We may add built-in hash support for this at a later date, but as of PHP 5.2.x you will need to either provide your own hashing or use the new SPL function spl_object_hash(). Exceptions can not be thrown from __toString() methods.

PHP:
<?php
class foo {
    public function __toString() {
        throw new Exception;
    }
}

try {
    print new foo;
    /* Fatal error:  Method foo::__toString() must
       not throw an exception in filename on line n */
} catch(Exception $e) {}
?>
Вот от кого не ожидал поведения школьника с спермотоксикозом, так это от Вас - zerkms
 

zerkms

TDD infected
Команда форума
Из этого следует что Ваши познания крайне недостаточны, как для того, кто претендует быть php-разработчиком.
Ни echo, ни print не являются функциями и их механизм работы отличается.
как из этого следует невозможность выброса эксепшнов?

http://php.net/manual/en/migration52.incompatible.php
вот эта ссылка - уже другое дело. каким боком только была
http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring
в которой об этом ограничении ни слова - история умалчивает.

Омг, что значит не содержит? А если посмотреть внимательнее код, что я привел?
вот тут был невнимателен.
тем не менее - всё равно это не вариант. try / catch у меня оборачивают конкретные конструкции кода, а еррор_хандлер глобален.
 

Fortop

Новичок
как из этого следует невозможность выброса эксепшнов?
Из этого следует унаследованный код, который будет работать не так как Вам хочется. В данном конкретном случае он не позволяет пробросить исключение.

Я привел цитату, и свои выводы из этой цитаты.
Changelog всего лишь подтвердил мои выводы.

Вот несколько другое описание вопроса, где явно указывается на проблемы с исключениями
http://php.interec.es/UPDATE_5_2.txt
The magic method __toString() will now be called in a string context, that is, anywhere an object is used as a string. When implementing your __toString() method in a class, you should be aware that the script will terminate if your function throws an exception.
 

zerkms

TDD infected
Команда форума
Из этого следует унаследованный код, который будет работать не так как Вам хочется.
повторяю вопрос: как из того факта, что в php <5.2 __toString() работал только при echo или print следует невозможность выброса эксепшнов?

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

Вот несколько другое описание вопроса, где явно указывается на проблемы с исключениями
было бы ещё где-то объяснение подобного поведения.
 

Fortop

Новичок
zerkms
повторяю вопрос: как из того факта, что в php <5.2 __toString() работал только при echo или print следует невозможность выброса эксепшнов?
Повторяю.
Из того что оно раньше работало только с echo/print, и того что сейчас не может быть выброшено необработанное исключение, следует наличие унаследованного кода, который работает не так как Вам этого хочется.
О чем я и писал.
Fortop
Я ничего не утверждаю.
Я предлагаю не жить вашими иллюзиями. И пользоваться мануалами.
В остальном же.
Вас забанили на php.net? Закрыли исходники?
Берем и смотрим, как работают echo/print, как реализован __toString(), как реализовано приведение к типу (string)
Почему именно так, а не иначе... Потом можете поделиться знаниями с остальными.
 

zerkms

TDD infected
Команда форума
Ответ найден. Благодаря SoF (http://stackoverflow.com/questions/2429642/why-its-impossible-to-throw-exception-from-tostring)
http://devzone.zend.com/article/2016-Zend-Weekly-Summaries-Issue-336#Heading6

Из того что оно раньше работало только с echo/print, и того что сейчас не может быть выброшено необработанное исключение, следует наличие унаследованного кода, который работает не так как Вам этого хочется.
это вообще никак не коррелирует с моим вопросом. то, что "сейчас не может быть выброшено необработанное исключение" я увидел и без мануала. а echo/print никаким боком не объясняют этого поведения. как не описывает это же поведение и глава о __toString(). документация пхп (да и сам ЯП) в своём стиле - запрятать поглубже (в changelog) и потом ссылаться на ртфм.
 

Fortop

Новичок
это вообще никак не коррелирует с моим вопросом
Мда..... таки авитаминоз.
Вы подорвали мою веру в Вас, как в лучшую часть человечества.
Пошел убьюсь об стену.
 

zerkms

TDD infected
Команда форума
не, ну я правда не понимаю. как из утверждения "в php <5.2 __toString() вызывался только в паре с echo/print" может следовать "из __toString() нельзя выкинуть эксепшн".
ты можешь написать в терминах формальной логики выкладки, приводящие из А в Б?
 

Fortop

Новичок
Да не следует оно. Как мне еще объяснить что из этой выкладки следует - что имеется легаси код. Который работает хитрожопым образом.

-~{}~ 12.03.10 03:31:

А уж из хитрожопости через пятую точку и шестое чувство можно вывести что угодно.
 

craz

Нестандартное звание
блин вот интересная тема раз в неделю и обязательно: спермотаксикоз, школота, хитрожопость, авитаминозы, почему блин вы не можете общаться как культурные люди то?


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

HraKK

Мудак
Команда форума
Fortop
Серьезно, ты сейчас не прав немного, пожалуйста, не учись у нас быть агрессивными хамами, zerkms прав в том что из мана (не чейнджлога) не следует что нельзя кидать. Да, ясно что нельзя в практическом как он и нашел, но вот почему это не баг - не ясно. А ты на него начинаешь нападать и обзываться. Зачем? А, он пытается конструктивно отвечать. Так что, лично я, а ты думаю заметил что тебе я симпатизирую, в этом топике разочаровался больше в тебе. Задумайся, пожалуйста, мне отвечать не надо.
 

HraKK

Мудак
Команда форума
Тема закрыта.

Создание тем с названиями из ЗАГЛАВНЫХ букв, с оскорбительным содержанием, нецензурными выражениями и др. запрещено правилами форума.
Правила форума: http://phpclub.ru/talk/announcement.php?s=&forumid=12
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху