Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

PHP

Автор myst, августа 30, 2010, 14:48

0 Пользователи и 1 гость просматривают эту тему.

myst

Хм... :-\
Код (EmbedVideo.hooks.php) Выделить

<?php
        
# if the service has it's own custom extern declaration, use that instead
        
$clause $entry['extern'];
        if (isset(
$clause)) {
...
?>



Код (EmbedVideo.Services.php) Выделить

<?php
...
    
'edutopia' => array(
        
'extern' =>
            
'<object width="$3" height="$4">' .
...
    
'youtube' => array(
        
'url' => 'http://www.youtube.com/v/$1'
    
),
    
'youtubehd' => array(
        
'url' => '[url=http://www.youtube.com/v/$1&ap=%2526fmt%3D22']http://www.youtube.com/v/$1&ap=%26fmt=22'[/url];,
        
'default_width' => 720,
        
'default_ratio' => 16/9
    
)
);
?>


Надо думать, кодер неправильно проверяет существование элемента в массиве, и в строгом режиме PHP выдаёт предупреждение. Можно пропатчить, если пыхпыхеры скажут кошерное решение. Я сам в PHP не разбираюсь.

Demetrius

Попробуйте заменить
$clause = $entry['extern'];
if (isset($clause)) {


на
if (isset($entry['extern'])) {
  $clause = $entry['extern'];


Если и после этого будут ошибки, тогда добавить ещё одну строчку:
$clause = 0;
if (isset($entry['extern'])) {
  $clause = $entry['extern'];

jvarg

Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

myst

Как это поможет, если
Цитата: http://www.php.net/manual/en/language.types.array.php
Note:

Attempting to access an array key which has not been defined is the same as accessing any other undefined variable: an E_NOTICE-level error message will be issued, and the result will be NULL.
, а обращение по несуществующему индексу никуда не делось?

myst

Цитата: jvarg от августа 31, 2010, 08:09
Цитата: myst от августа 30, 2010, 14:48
'url' => 'http://www.youtube.com/v/$1&ap=%26fmt=22';,

Вы уверены, что точка с запятой там к месту?
Это вообще не имеет отношения к делу. Я привёл этот фрагмент, чтобы показать, что для YouTube действительно нет индекса extern.

myst

Цитата: http://www.php.net/manual/en/function.isset.php
This also work for elements in arrays:

<?php

$a 
= array ('test' => 1'hello' => NULL);

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello'$a)); // TRUE

?>


Капец! Убить создателя этого быдлоязыка! Убить, убить!
Значит таки поможет...

Demetrius

Цитата: jvarg от августа 31, 2010, 08:09
Цитата: myst от августа 30, 2010, 14:48
'url' => 'http://www.youtube.com/v/$1&ap=%26fmt=22';,

Вы уверены, что точка с запятой там к месту?
В объявлении массива?! Окститесь! Там только запятые возможны.

Цитата: myst от августа 31, 2010, 08:18
Как это поможет, если <...> обращение по несуществующему индексу никуда не делось?
Делось же. :eat:

Цитата: myst от августа 31, 2010, 08:28
Цитата: http://www.php.net/manual/en/function.isset.php
This also work for elements in arrays:

<?php

$a 
= array ('test' => 1'hello' => NULL);

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello'$a)); // TRUE

?>


Капец! Убить создателя этого быдлоязыка! Убить, убить!
Значит таки поможет...
Вообще-то в некоторой мере такая конструкция не менее логична. :eat:

Пора бы знать, что в PHP библиотека и язык срослись.

Цитата: myst от августа 31, 2010, 08:21
Это вообще не имеет отношения к делу. Я привёл этот фрагмент, чтобы показать, что для YouTube действительно нет индекса extern.
Вы могли бы его сами добавить. Это авор таким образом реализовал возможность дополнительной конфигурации. :eat:

myst

Цитата: Demetrius от августа 31, 2010, 09:32
Вообще-то в некоторой мере такая конструкция не менее логична. :eat:
Ога, синтаксис тот же — порядок операций другой. Классная логика! Глобально и надёжно. :green:

Цитата: Demetrius от августа 31, 2010, 09:32
Пора бы знать, что в PHP библиотека и язык срослись.
Это как-то оправдывает аффтаров, родивших чудовище? :eat:

Цитата: Demetrius от августа 31, 2010, 09:32
Вы могли бы его сами добавить. Это авор таким образом реализовал возможность дополнительной конфигурации. :eat:
С какого перепуга я должен что-то добавлять сам? Автор не добавил, значит не надо. А вот как пыхеры пишут, что у них в одном месте работает, а в другом предупреждения сыпятся при том, что язык тот же, интерпретатор тоже — это очень интересный вопрос.

Demetrius

Цитата: myst от августа 31, 2010, 10:21
Цитата: Demetrius от августа 31, 2010, 09:32
Вообще-то в некоторой мере такая конструкция не менее логична. :eat:
Ога, синтаксис тот же — порядок операций другой. Классная логика! Глобально и надёжно. :green:
Порядок действий тот же. Ошибка выдаётся не при получении элемента из массива, а при попытке его использовать в операторе.

Цитата: myst от августа 31, 2010, 10:21
Цитата: Demetrius от августа 31, 2010, 09:32
Пора бы знать, что в PHP библиотека и язык срослись.
Это как-то оправдывает аффтаров, родивших чудовище? :eat:
«Евреи сделали много плохих вещей» © Phersu  ;)

Цитата: myst от августа 31, 2010, 10:21
Цитата: Demetrius от августа 31, 2010, 09:32
Вы могли бы его сами добавить. Это авор таким образом реализовал возможность дополнительной конфигурации. :eat:
С какого перепуга я должен что-то добавлять сам? Автор не добавил, значит не надо. А вот как пыхеры пишут, что у них в одном месте работает, в другом предупреждения сыпятся; при том язык тот же интерпретатор тоже — это очень интересный вопрос.
Вы ещё волшебнокавычки и автоматический перенос переданных извне переменных в глобальную область видимости включите, у Вас ещё больше скриптов попадает. :green:

Всё зависит от автора. Что поделать, в PHP много любителей. Я уверен, что если бы Common Lisp стал да-факто стандартом для программирования в интернете, на нём бы такой мути было не меньше.


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

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

myst

Цитата: Demetrius от августа 31, 2010, 10:36
Порядок действий тот же. Ошибка выдаётся не при получении элемента из массива, а при попытке его использовать в операторе.
Тогда какого хрена от

<?php
$entry
['extern'];
?>


то же предупреждение вылезает, а?
Это предупреждение операции индексации, и если isset($entry['extern']) не выдаёт предупреждение, значит индексация не выполняется перед isset.

jvarg

Цитата: Demetrius от августа 31, 2010, 09:32
Цитировать
Цитировать
Цитата: jvarg от Сегодня в 12:09Цитата: myst от Вчера в 18:48'url' => 'http://www.youtube.com/v/$1&ap=&fmt=22';;,
Вы уверены, что точка с запятой там к месту?
В объявлении массива?! Окститесь! Там только запятые возможны.

Так и я про то же. Но в отрывке-то есть.
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

myst

Цитата: Demetrius от августа 31, 2010, 10:36
Вообще, я вижу это так: PHP был DSL, хоть Вы и не согласны со мной в этом, но DSL, заточенный под определённую цель: обработка полученных из HTML-страницы форм и вывод результатов в виде HTML на мелких домашних страницах. Отсюда встраиваемость прямо в код страницы (которая уже не нужна), отсюда отсутствие модулей как таковых, отсюда волшебнокавычки и расшифровка переданных переменных.

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

myst

Цитата: jvarg от августа 31, 2010, 10:51
Так и я про то же. Но в отрывке-то есть.
Ещё раз по буквам: э т о   н е  и м е е т  о т н о ш е н и я  к  д е л у.

jvarg

Нормальный язык для своих целей. Что вы до него докапались.
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Demetrius

Цитата: jvarg от августа 31, 2010, 10:59
Нормальный язык для своих целей. Что вы до него докапались.
Основная проблема в том, что в наше время его используют явно не для своих целей.

myst

Если бы он был нормальным, я бы не докапывался. Для каких целей он создавался, какие элементы грамматики этого языка оптимизированы под эти цели?

Demetrius

Добавление небольшой интерактивности на уже работающий веб-сайт. Типа, гостевые книжечки всякие, счётчики посущений, голосования.

Я уже говорил:
  • встраивание в код <? ... ?>
  • обращение к переданных из интернета переменным как к основным (к счастью, уже убрали)
  • автоматические экранирование спецсимволов (к счастью, уже убрали)

myst

Негусто для специального языка. :green:

Цитата: Demetrius от августа 31, 2010, 11:13
обращение к переданных из интернета переменным как к основным (к счастью, уже убрали)
Это вообще не относится к языку.

jvarg

Цитата: myst от августа 31, 2010, 11:04
Если бы он был нормальным, я бы не докапывался. Для
Странный у вас критерий нормальности. Т.е., все, что не нравится лично вам - ненормально?
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

myst

Цитата: jvarg от августа 31, 2010, 11:25
Странный у вас критерий нормальности. Т.е., все, что не нравится лично вам - ненормально?
Когда один и тот же синтаксис имеет разную семантику, это нормально?

jvarg

Я так и не понял, что конкретно вызвало ваше возмущение?
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Demetrius

Цитата: myst от августа 31, 2010, 11:48
Когда один и тот же синтаксис имеет разную семантику, это нормально?
Конечно. Это омонимия. Языки без омонимии ненормальны. :eat:

Логично, что $x и $z[1] обрабатываются одинаково? Логично.

jvarg

Цитата: myst от августа 31, 2010, 08:28
Цитата: http://www.php.net/manual/en/function.isset.php
This also work for elements in arrays:

<?php

$a 
= array ('test' => 1'hello' => NULL);

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello'$a)); // TRUE

?>


Капец! Убить создателя этого быдлоязыка! Убить, убить!
Значит таки поможет...

Здесь я ваших воплей вообще не понял.

Фукция isset() проверяет, была ли инициализированна переменная. Присваивание NULL не является инициализацией, так как это и есть значение перменной в момент создания.
А функция array_key_exists() проверяет, существует ли ключ с таким наименованием вообще (не важно, был ли он инициализирован, или нет).
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Demetrius

Цитата: jvarg от августа 31, 2010, 12:41
Здесь я ваших воплей вообще не понял.

Фукция isset() проверяет, была ли инициализированна переменная. Присваивание NULL не является инициализацией, так как это и есть значение перменной в момент создания.
Идея в том, что аргументы функции вычисляются до её выполнения. То есть при вызове функции a(10+3) ей будет передано число 13, а не 10+3.

Если бы isset была функцией, то сначала должно бы по идее вычислиться значение $arr['sth'], при этом вычислении должна была бы произойти ошибка, и, следовательно, isset($arr['sth']) должно бы всегда вызывать ошибку.

Но, так как myst не дочитал до конца:
Цитата: http://www.php.net/manual/en/function.isset.php
Note: Because this is a language construct and not a function, it cannot be called using variable functions
Ему кажется, что здесь есть что-то нелогичное.

myst

Цитата: Demetrius от августа 31, 2010, 12:27
Конечно. Это омонимия. Языки без омонимии ненормальны. :eat:
За языки программирования с омонимией сжигать надо живьём.

Цитата: Demetrius от августа 31, 2010, 12:27
Логично, что $x и $z[1] обрабатываются одинаково? Логично.
Логично, что foo(a) ≡ λ = a, foo(λ); а bar(a) ≢ λ = a, bar(λ)?

Цитата: Demetrius от августа 31, 2010, 12:54
Но, так как myst не дочитал до конца:
Quote from: http://www.php.net/manual/en/function.isset.php
ЦитироватьNote: Because this is a language construct and not a function, it cannot be called using variable functions
Ему кажется, что здесь есть что-то нелогичное.
Каким образом документирование алогичности отменяет алогичность?

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр