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

PHP

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

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

myst

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

Цитата: jvarg от августа 31, 2010, 12:41
Фукция isset() проверяет, была ли инициализированна переменная. Присваивание NULL не является инициализацией, так как это и есть значение перменной в момент создания.
А функция array_key_exists() проверяет, существует ли ключ с таким наименованием вообще (не важно, был ли он инициализирован, или нет).
Капитан Очевидность попросил подменить?

Demetrius

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

var array = [1, 2, 3]
alert(array[3])

Омонимичное использование квадратных скобок в JavaScript'е.

a = 10 & b;
c = &d;

Омонимичное использование амперсанда в C++.

a = *c;
b = d * f;

Омонимичное использование звёздочки в C.

var
  A: ↑Integer;
begin
  new(A);
  A↑ := 1;

Омонимичное использование стрелочки в Паскале.

Ой, боюсь я, только авторы APL'а избегут карающей длани.

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

Воспринимается, что функции принимают не значения, а выражения. Время вычисления этих выражений не важно. То, что на самом деле человеческая логика не совпадает с логикой императивных ЯП, не столь важно.

Наоборот, нелогично было бы, если бы семантика isset требовала бы строк в кавычках: везде переменные называются без кавычек, а здесь с кавычками.

Цитата: myst от августа 31, 2010, 13:17
Цитата: 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
Ему кажется, что здесь есть что-то нелогичное.
Каким образом документирование алогичности отменяет алогичность?
А то, что ключевые слова и индентификаторы обозначаются одинаково — тоже по Вашему алогичность?

myst

Цитата: Demetrius от августа 31, 2010, 13:49
var array = [1, 2, 3]
alert(array[3])
Омонимичное использование квадратных скобок в JavaScript'е.
Разный контекст.

Цитата: Demetrius от августа 31, 2010, 13:49
a = 10 & b;
c = &d;
Омонимичное использование амперсанда в C++.
Унарность vs бинарность.

[/quote]
Цитата: Demetrius от августа 31, 2010, 13:49
a = *c;
b = d * f;
Омонимичное использование звёздочки в C.
То же самое.

Цитата: Demetrius от августа 31, 2010, 13:49
var
  A: ↑Integer;
begin
  new(A);
  A↑ := 1;
Омонимичное использование стрелочки в Паскале.
Разный контекст.

Цитата: Demetrius от августа 31, 2010, 13:49
А там как раз foo(a) ≡ λ = a, foo(λ); и bar(a) ≡ λ = a, bar(λ).
То есть Вы утверждаете, что вычисление параметра подпрограммы в PHP выполняется не перед её вызовом?

Цитата: Demetrius от августа 31, 2010, 13:49
Воспринимается, что функции принимают не значения, а выражения. Время вычисления этих выражений не важно.
Кем воспринимается? Функции парсят выражения, передаваемые в параметрах, а потом их выполняют? При чём тут время вычисления? Кому оно неважно? Какой-то поток сознания, однако.

Цитата: Demetrius от августа 31, 2010, 13:49
Наоборот, нелогично было бы, если бы семантика isset требовала бы строк в кавычках: везде переменные называются без кавычек, а здесь с кавычками.
Какого чёрта огурец выглядит как помидор?

Цитата: Demetrius от августа 31, 2010, 13:49
А то, что ключевые слова и индентификаторы обозначаются одинаково — тоже по Вашему алогичность?
Ключевые слова перечислены в грамматике. Реквестирую грамматику PHP на анализ.

arseniiv

myst, а вы функций, принимающих ссылки, не видели? Они же примерно так же работают, как этот isset. Или скажете, что можно обойтись без них? (Ну да, можно, можно и без побочного эффекта обойтись, можно вообще на Unlambda писать.)

Если б это было на C++ и если бы в нём частично не было строгой типизации, можно было бы увидеть такие прототипы:
bool isset(&v);
bool somefunc(v);

myst

Цитата: arseniiv от августа 31, 2010, 14:28
myst, а вы функций, принимающих ссылки, не видели? Они же примерно так же работают, как этот isset. Или скажете, что можно обойтись без них?
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?

Цитата: arseniiv от августа 31, 2010, 14:28
Если б это было на C++ и если бы в нём частично не было строгой типизации, можно было бы увидеть такие прототипы:
bool isset(&v);
bool somefunc(v);
Пример вообще не в тему.

myst

Цитата: Demetrius от августа 31, 2010, 13:49
Наоборот, нелогично было бы, если бы семантика isset требовала бы строк в кавычках: везде переменные называются без кавычек, а здесь с кавычками.
Блин, только сейчас понял. Должен быть предикат существования индекса, а такое порно не нужно.

arseniiv

Цитата: myst от августа 31, 2010, 14:38
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?
Как особенный ссылочный nil/NULL/empty/unassigned/что-там-ещё-бывает. Вообще, надо, чтобы все несуществующие вещи имели вид как существующие до инициализации. Тогда там никакая функция не нужна и проверять на равенство nil. Очень хорошая, по мне, идея.

Demetrius

Цитата: myst от августа 31, 2010, 14:10
Цитата: Demetrius от августа 31, 2010, 13:49
А там как раз foo(a) ≡ λ = a, foo(λ); и bar(a) ≡ λ = a, bar(λ).
То есть Вы утверждаете, что вычисление параметра подпрограммы в PHP выполняется не перед её вызовом?
Я утверждаю, что isset не подпрограмма. И то, что она не подпрограмма, совершенно логично.

Цитата: myst от августа 31, 2010, 14:10
Цитата: Demetrius от августа 31, 2010, 13:49
Воспринимается, что функции принимают не значения, а выражения. Время вычисления этих выражений не важно.
Кем воспринимается? Функции парсят выражения, передаваемые в параметрах, а потом их выполняют? При чём тут время вычисления? Кому оно неважно? Какой-то поток сознания, однако.
:wall:
Я имею ввиду восприятие человеком.

Цитата: myst от августа 31, 2010, 14:10
Цитата: Demetrius от августа 31, 2010, 13:49
Наоборот, нелогично было бы, если бы семантика isset требовала бы строк в кавычках: везде переменные называются без кавычек, а здесь с кавычками.
Какого чёрта огурец выглядит как помидор?
Огурец выглядит как огурец. Только огурцы бывают разные: больше, меньше, зеленее, темнее. То, что вы привыкли к тому, что все огурцы одинаковы, вовсе не значит, что так должно быть.

Цитата: myst от августа 31, 2010, 14:10
Цитата: Demetrius от августа 31, 2010, 13:49
А то, что ключевые слова и индентификаторы обозначаются одинаково — тоже по Вашему алогичность?
Ключевые слова перечислены в грамматике. Реквестирую грамматику PHP на анализ.
Про грамматику не в курсе, а ключевые слова перечислены тут: http://php.net/manual/en/reserved.keywords.php. isset там есть, кстати.

Цитата: myst от августа 31, 2010, 14:47
Блин, только сейчас понял. Должен быть предикат существования индекса, а такое порно не нужно.
Это же жутко неудобно. Тогда надо было бы делать if (isset($array) && 'sth' in $array),  а в PHP достаточно if (isset($array['sth'])). Вы же не будете утверждать, что первое удобнее и понятнее? :eat:

myst

Цитата: Demetrius от августа 31, 2010, 15:10
Я утверждаю, что isset не подпрограмма. И то, что она не подпрограмма, совершенно логично.
А чего она тогда выглядит как подпрограмма, ы?

Цитата: Demetrius от августа 31, 2010, 15:10
Огурец выглядит как огурец. Только огурцы бывают разные: больше, меньше, зеленее, темнее. То, что вы привыкли к тому, что все огурцы одинаковы, вовсе не значит, что так должно быть.
Какой же это огурец (подпрограмма), если это никакой не огурец?

Цитата: Demetrius от августа 31, 2010, 15:10
Про грамматику не в курсе,
Так у этого поделия и грамматики нет?

Цитата: Demetrius от августа 31, 2010, 15:10
а ключевые слова перечислены тут: http://php.net/manual/en/reserved.keywords.php. isset там есть, кстати.
Как-то там не очень ясно. Но чем бы оно ни было, что оно делает в списке функций (http://www.php.net/manual/en/ref.var.php), если это не подпрограмма?

Цитата: Demetrius от августа 31, 2010, 15:10
Это же жутко неудобно. Тогда надо было бы делать if (isset($array) && 'sth' in $array),  а в PHP достаточно if (isset($array['sth'])). Вы же не будете утверждать, что первое удобнее и понятнее? :eat:
Ога, создать предикат has_index($array, 'index'), возвращающий false, когда array == NULL или 'index' не существует, низя. :eat:

myst

Цитата: arseniiv от августа 31, 2010, 14:52
Цитата: myst от августа 31, 2010, 14:38
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?
Как особенный ссылочный nil/NULL/empty/unassigned/что-там-ещё-бывает. Вообще, надо, чтобы все несуществующие вещи имели вид как существующие до инициализации. Тогда там никакая функция не нужна и проверять на равенство nil. Очень хорошая, по мне, идея.
arseniiv, Вы как обычно на какой-то своей волне.
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.

Demetrius

Цитата: myst от августа 31, 2010, 15:46
Цитата: Demetrius от августа 31, 2010, 15:10
Я утверждаю, что isset не подпрограмма. И то, что она не подпрограмма, совершенно логично.
А чего она тогда выглядит как подпрограмма, ы?
Потому что так удобно.

sizeof в typeof тоже обычно делают похожими на подпрограммы.

Цитата: myst от августа 31, 2010, 15:46
Цитата: Demetrius от августа 31, 2010, 15:10
Огурец выглядит как огурец. Только огурцы бывают разные: больше, меньше, зеленее, темнее. То, что вы привыкли к тому, что все огурцы одинаковы, вовсе не значит, что так должно быть.
Какой же это огурец (подпрограмма), если это никакой не огурец?
А с чего вы взяли, что всё, после чего стоит скобка, это функция?

Цитата: myst от августа 31, 2010, 15:46
Цитата: Demetrius от августа 31, 2010, 15:10
Про грамматику не в курсе,
Так у этого поделия и грамматики нет?
Как может быть язык без грамматики?

Цитата: myst от августа 31, 2010, 15:46
Цитата: Demetrius от августа 31, 2010, 15:10
а ключевые слова перечислены тут: http://php.net/manual/en/reserved.keywords.php. isset там есть, кстати.
Как-то там не очень ясно. Но чем бы оно ни было, что оно делает в списке функций (http://www.php.net/manual/en/ref.var.php), если это не подпрограмма?
Оно облегчает себяпоиск при обращении к документации. :eat:
Там ещё и delete есть.

Цитата: myst от августа 31, 2010, 15:46
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.
Языкъ C++ — мѣра всѣхъ вещей?

myst, неужели вы не видите, что в скобках preg_replace('/(\S+@\S+\.\S+)/', '<a href="mailto:$1>$1</a>', $str) и в isset($str) разный контекст за счёт семантики самого isset?

jvarg

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

arseniiv

Цитата: myst от августа 31, 2010, 15:49
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.
Я не говорил, что то C++. Такому коду мешает спецификация языка, в частности, строгое указание типа. А вот если бы все переменные в этом языке были бы указателями, то код был бы такой (рабочий):

bool isset(void *var) {
  return var != NULL;
}


P. S. Истинно говорю вам: что мешает рассматривать isset как функцию, берущую аргумент-ссылку? (Пока справку по PHP не открывал и не знаю, можно ли такое сделать с своими функциями.)

myst

Цитата: Demetrius от августа 31, 2010, 17:00
Потому что так удобно.
О-о, расскажите об этом подробнее.

Цитата: Demetrius от августа 31, 2010, 17:00
sizeof в typeof тоже обычно делают похожими на подпрограммы.
Ви так оворите, будто это что-то хорошее. :eat:

Цитата: Demetrius от августа 31, 2010, 17:00
А с чего вы взяли, что всё, после чего стоит скобка, это функция?
Так всё-таки не огурец? :green:

Цитата: Demetrius от августа 31, 2010, 17:00
Как может быть язык без грамматики?
Где же она? Покажите.

Цитата: Demetrius от августа 31, 2010, 17:00
Языкъ C++ — мѣра всѣхъ вещей?
Это arseniiv его приплёл, я-то тут при чём? :donno:

Цитата: Demetrius от августа 31, 2010, 17:00
myst, неужели вы не видите, что в скобках preg_replace('/(\S+@\S+\.\S+)/', '<a href="mailto:$1>$1</a>', $str) и в isset($str) разный контекст за счёт семантики самого isset?
Я-то думал, что контекст — это нечто внешнее, а это вот оно как...
int i, j=10; i = foo(5); i = bar("string"); i = zoo(j) — разные вещи в скобках, стало быть контексты разные. :smoke:

myst

Цитата: arseniiv от августа 31, 2010, 17:18
Цитата: myst от августа 31, 2010, 15:49
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.
Я не говорил, что то C++. Такому коду мешает спецификация языка, в частности, строгое указание типа. А вот если бы все переменные в этом языке были бы указателями, то код был бы такой (рабочий):

bool isset(void *var) {
  return var != NULL;
}


P. S. Истинно говорю вам: что мешает рассматривать isset как функцию, берущую аргумент-ссылку? (Пока справку по PHP не открывал и не знаю, можно ли такое сделать с своими функциями.)
Туго-то как... Возьмите же ссылку на элемент массива, не выполняя индексации, а я посмотрю.

arseniiv

Цитата: myst от августа 31, 2010, 17:23
Туго-то как... Возьмите же ссылку на элемент массива, не выполняя индексации, а я посмотрю.
К сожалению, я не знаю ни одного языка, где это можно. Но я могу придумать свой! Вы чего хотите-то? Например, в Lua можно обратиться к несуществующему элементу таблицы и получить nil. Увы, там нет ссылок как отдельной сущности.

myst

Цитата: arseniiv от августа 31, 2010, 17:26
К сожалению, я не знаю ни одного языка, где это можно.
Это ответ на вопрос
Цитата: arseniiv от августа 31, 2010, 17:18
что мешает рассматривать isset как функцию, берущую аргумент-ссылку?

Цитата: arseniiv от августа 31, 2010, 17:26
Вы чего хотите-то?
Я хочу, чтобы Вы наконец вникли в обсуждаемый вопрос и перестали гнать ахинею.

arseniiv

Ладно, перестану. Потому что сам сейчас не могу разобраться, где я написал нелепо, а где без не. (Но мне казалось, что я чуть-чуть к месту, конечно.) Буду наблюдать.

Demetrius

Цитата: myst от августа 31, 2010, 17:20
Цитата: Demetrius от августа 31, 2010, 17:00
Потому что так удобно.
О-о, расскажите об этом подробнее.
Сравните:
return isset($a['b']['c']->d)
return in_array($a, 'b') ? (in_array($a['b'], 'c') ? has_property($a['b']['c']->d) : false) : false;
Что удобнее, ваш волшебный предикат или isset? :green:


Цитата: myst от августа 31, 2010, 17:20
Цитата: Demetrius от августа 31, 2010, 17:00
sizeof в typeof тоже обычно делают похожими на подпрограммы.
Ви так оворите, будто это что-то хорошее. :eat:
А что в этом плохого? Тогда давайте сделаем идентификаторы и ключеслова тоже отдельными.

Цитата: myst от августа 31, 2010, 17:20
Цитата: Demetrius от августа 31, 2010, 17:00
А с чего вы взяли, что всё, после чего стоит скобка, это функция?
Так всё-таки не огурец? :green:
Давайте сначала определимся, что есть огурец и помидор в данном контексте.

Цитата: myst от августа 31, 2010, 17:20
Цитата: Demetrius от августа 31, 2010, 17:00
Как может быть язык без грамматики?
Где же она? Покажите.
Читайте справку. :eat: То, что она не описана в БНФ, не значит, что её нет. Я вообще не понимаю, в чём такая польза от БНФ.

Поищите на сайте PHP Compiler'а, вроде бы у них была формально описанная.

Цитата: myst от августа 31, 2010, 17:20
Цитата: Demetrius от августа 31, 2010, 17:00
myst, неужели вы не видите, что в скобках preg_replace('/(\S+@\S+\.\S+)/', '<a href="mailto:$1>$1</a>', $str) и в isset($str) разный контекст за счёт семантики самого isset?
Я-то думал, что контекст — это нечто внешнее, а это вот оно как...
int i, j=10; i = foo(5); i = bar("string"); i = zoo(j) — разные вещи в скобках, стало быть контексты разные. :smoke:
Да. Скорее всего, foo и bar — функции с разными аргументами. Без объявления не скажешь точно, с какими.

Цитата: jvarg от августа 31, 2010, 17:03
PHP - forever!!!
Не дай бог. :uzhos:

Цитата: jvarg от августа 31, 2010, 17:03
Myst must be disassembled!!!!
Myst робот?

arseniiv

Offtop
Цитата: Demetrius от сентября  1, 2010, 09:50
в чём такая польза от БНФ
А она не помогает строить трансляторы? Каждой продукции в нерасширенной БНФ соответствует процедура, и так они вместе весь текст разбирают по кусочкам от lexer'а. Можно иначе (не знаю)? (Для простых языков вроде форта, лиспа — конечно, но ведь их синтаксис простой.)

Demetrius

Цитата: arseniiv от сентября  1, 2010, 10:43
А она не помогает строить трансляторы?
Наверное, помогает, не знаю. :donno: Никогда этим не занимался.

arseniiv

Offtop
Я-то для своего страшного BFormat'а делал... ;D

jvarg

Цитата: Demetrius от сентября  1, 2010, 09:50
Цитата: jvarg от Myst must be disassembled!!!!
Myst робот?

Ну, "Myst must die" я посчитал несколько грубоватым...
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

myst

Цитата: Demetrius от сентября  1, 2010, 09:50
Сравните:
return isset($a['b']['c']->d)
return in_array($a, 'b') ? (in_array($a['b'], 'c') ? has_property($a['b']['c']->d) : false) : false;
Что удобнее, ваш волшебный предикат или isset? :green:
Ладно, убедили. Только второй вариант явно намеренно сделан более громоздким, чем требуется. :negozhe: Зачем здесь тернарные операторы? Можно же
return in_array($a, 'b') && in_array($a['b'], 'c') && has_property($a['b']['c']->d);

Цитата: Demetrius от сентября  1, 2010, 09:50
Давайте сначала определимся, что есть огурец и помидор в данном контексте.
Так уже определились сто лет как. (См. выше.)

Цитата: Demetrius от сентября  1, 2010, 09:50
А что в этом плохого? Тогда давайте сделаем идентификаторы и ключеслова тоже отдельными.
Смешение ж и п. Правильно сделано в Аде.

Цитата: Demetrius от сентября  1, 2010, 09:50
Читайте справку. :eat:
Я уже почитал. В одном месте isset — function, в другом — language construct. Спасибо.

Цитата: Demetrius от сентября  1, 2010, 09:50
То, что она не описана в БНФ, не значит, что её нет.
Покажите в другом виде, я не гордый. :eat:

Цитата: Demetrius от сентября  1, 2010, 09:50
Поищите на сайте PHP Compiler'а, вроде бы у них была формально описанная.
А, то есть я искать должен?

Цитата: Demetrius от сентября  1, 2010, 09:50
Да. Скорее всего, foo и bar — функции с разными аргументами. Без объявления не скажешь точно, с какими.
И чего, что разные параметры? Одна из них перестаёт от этого быть подпрограммой?

Demetrius

Цитата: myst от сентября  1, 2010, 10:56
Цитата: Demetrius от сентября  1, 2010, 09:50
Сравните:
return isset($a['b']['c']->d)
return in_array($a, 'b') ? (in_array($a['b'], 'c') ? has_property($a['b']['c']->d) : false) : false;
Что удобнее, ваш волшебный предикат или isset? :green:
Ладно, убедили. Только второй вариант явно намеренно сделан более громоздким, чем требуется. :negozhe: Зачем здесь тернарные операторы? Можно же
return in_array($a, 'b') && in_array($a['b'], 'c') && has_property($a['b']['c']->d);
Я просто о таком варианте не подумал. :)

Цитата: myst от сентября  1, 2010, 10:56
Цитата: Demetrius от сентября  1, 2010, 09:50
А что в этом плохого? Тогда давайте сделаем идентификаторы и ключеслова тоже отдельными.
Смешение ж и п. Правильно сделано в Аде.
:o
В аде сантиметры в дециметры неявно не переведёшь.

Возможно, это и удобно, но... как-то громоздко.

Цитата: myst от сентября  1, 2010, 10:56Я уже почитал. В одном месте isset — function, в другом — language construct. Спасибо.
Function reference перечисляет функции и языковые конструкции, похожие на функции.

Цитата: myst от сентября  1, 2010, 10:56
Цитата: Demetrius от сентября  1, 2010, 09:50
То, что она не описана в БНФ, не значит, что её нет.
Покажите в другом виде, я не гордый. :eat:
Э... А вся справка — это что?

Цитата: myst от сентября  1, 2010, 10:56
Цитата: Demetrius от сентября  1, 2010, 09:50
Поищите на сайте PHP Compiler'а, вроде бы у них была формально описанная.
А, то есть я искать должен?
Ну Вам же надо, не мне. :о

Цитата: myst от сентября  1, 2010, 10:56
Цитата: Demetrius от сентября  1, 2010, 09:50
Да. Скорее всего, foo и bar — функции с разными аргументами. Без объявления не скажешь точно, с какими.
И чего, что разные параметры? Одна из них перестаёт от этого быть подпрограммой?
Возможно, и перестаёт. Зависит от языка.
Float(10) в паскале — тоже подпрограмма?


Вообще, я не считаю, что PHP — хорошо спроектированный язык. Но при этом это не такой уж и монстр. İ℧ SQL гораздо страшнее.

Ту же isset удобнее заменить исключениями, но, т.к. они в PHP появились недавно, никто ещё их не использует. Да и ещё мешает то, что в текущей версии это только Hint, что сделано для совместимости.

Но — а) PHP позволяет писать работающие программы достаточно высокой сложности (та же MediaWiki), если он handled with care, б) PHP установлен почти на всех хостингах. С этим приходится мириться.

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

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

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

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

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