Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: myst от августа 30, 2010, 14:48

Название: PHP
Отправлено: myst от августа 30, 2010, 14:48
Хм... :-\
Код (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 не разбираюсь.
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 01:12
Попробуйте заменить
$clause = $entry['extern'];
if (isset($clause)) {


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


Если и после этого будут ошибки, тогда добавить ещё одну строчку:
$clause = 0;
if (isset($entry['extern'])) {
  $clause = $entry['extern'];
Название: PHP
Отправлено: jvarg от августа 31, 2010, 08:09
Цитата: myst от августа 30, 2010, 14:48
'url' => 'http://www.youtube.com/v/$1&ap=%26fmt=22' (http://www.youtube.com/v/$1&ap=%2526fmt%3D22');,

Вы уверены, что точка с запятой там к месту?
Название: PHP
Отправлено: myst от августа 31, 2010, 08:18
Как это поможет, если
Цитата: 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.
, а обращение по несуществующему индексу никуда не делось?
Название: PHP
Отправлено: myst от августа 31, 2010, 08:21
Цитата: jvarg от августа 31, 2010, 08:09
Цитата: myst от августа 30, 2010, 14:48
'url' => 'http://www.youtube.com/v/$1&ap=%26fmt=22' (http://www.youtube.com/v/$1&ap=%2526fmt%3D22');,

Вы уверены, что точка с запятой там к месту?
Это вообще не имеет отношения к делу. Я привёл этот фрагмент, чтобы показать, что для YouTube действительно нет индекса extern.
Название: PHP
Отправлено: 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

?>


Капец! Убить создателя этого быдлоязыка! Убить, убить!
Значит таки поможет...
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 09:32
Цитата: jvarg от августа 31, 2010, 08:09
Цитата: myst от августа 30, 2010, 14:48
'url' => 'http://www.youtube.com/v/$1&ap=%26fmt=22' (http://www.youtube.com/v/$1&ap=%2526fmt%3D22');,

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

Цитата: 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:
Название: PHP
Отправлено: myst от августа 31, 2010, 10:21
Цитата: Demetrius от августа 31, 2010, 09:32
Вообще-то в некоторой мере такая конструкция не менее логична. :eat:
Ога, синтаксис тот же — порядок операций другой. Классная логика! Глобально и надёжно. :green:

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

Цитата: Demetrius от августа 31, 2010, 09:32
Вы могли бы его сами добавить. Это авор таким образом реализовал возможность дополнительной конфигурации. :eat:
С какого перепуга я должен что-то добавлять сам? Автор не добавил, значит не надо. А вот как пыхеры пишут, что у них в одном месте работает, а в другом предупреждения сыпятся при том, что язык тот же, интерпретатор тоже — это очень интересный вопрос.
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 10:36
Цитата: 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 на мелких домашних страницах. Отсюда встраиваемость прямо в код страницы (которая уже не нужна), отсюда отсутствие модулей как таковых, отсюда волшебнокавычки и расшифровка переданных переменных.

Когда его стали использовать повсеместно и для серьёзных проектов, авторы ужаснулись и стали приводить его в божеский вид. Но — ведь резкие изменения могут не принять — постепенно. Отсюда столько режимов интерпретатора (кстати, их можно переключать прямо в скрипте, и любая функция может спрятать ошибки других ;)).
Название: PHP
Отправлено: myst от августа 31, 2010, 10:44
Цитата: Demetrius от августа 31, 2010, 10:36
Порядок действий тот же. Ошибка выдаётся не при получении элемента из массива, а при попытке его использовать в операторе.
Тогда какого хрена от

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


то же предупреждение вылезает, а?
Это предупреждение операции индексации, и если isset($entry['extern']) не выдаёт предупреждение, значит индексация не выполняется перед isset.
Название: PHP
Отправлено: jvarg от августа 31, 2010, 10:51
Цитата: Demetrius от августа 31, 2010, 09:32
Цитировать
Цитировать
Цитата: jvarg от Сегодня в 12:09Цитата: myst от Вчера в 18:48'url' => 'http://www.youtube.com/v/$1&ap=&fmt=22' (http://www.youtube.com/v/$1&ap=%26fmt=22');;,
Вы уверены, что точка с запятой там к месту?
В объявлении массива?! Окститесь! Там только запятые возможны.

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

Когда его стали использовать повсеместно и для серьёзных проектов, авторы ужаснулись и стали приводить его в божеский вид. Но — ведь резкие изменения могут не принять — постепенно. Отсюда столько режимов интерпретатора (кстати, их можно переключать прямо в скрипте, и любая функция может спрятать ошибки других ;)).
Наколеночный выродок, о чём я и говорю.
Название: PHP
Отправлено: myst от августа 31, 2010, 10:56
Цитата: jvarg от августа 31, 2010, 10:51
Так и я про то же. Но в отрывке-то есть.
Ещё раз по буквам: э т о   н е  и м е е т  о т н о ш е н и я  к  д е л у.
Название: PHP
Отправлено: jvarg от августа 31, 2010, 10:59
Нормальный язык для своих целей. Что вы до него докапались.
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 11:01
Цитата: jvarg от августа 31, 2010, 10:59
Нормальный язык для своих целей. Что вы до него докапались.
Основная проблема в том, что в наше время его используют явно не для своих целей.
Название: PHP
Отправлено: myst от августа 31, 2010, 11:04
Если бы он был нормальным, я бы не докапывался. Для каких целей он создавался, какие элементы грамматики этого языка оптимизированы под эти цели?
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 11:13
Добавление небольшой интерактивности на уже работающий веб-сайт. Типа, гостевые книжечки всякие, счётчики посущений, голосования.

Я уже говорил:
Название: PHP
Отправлено: myst от августа 31, 2010, 11:24
Негусто для специального языка. :green:

Цитата: Demetrius от августа 31, 2010, 11:13
обращение к переданных из интернета переменным как к основным (к счастью, уже убрали)
Это вообще не относится к языку.
Название: PHP
Отправлено: jvarg от августа 31, 2010, 11:25
Цитата: myst от августа 31, 2010, 11:04
Если бы он был нормальным, я бы не докапывался. Для
Странный у вас критерий нормальности. Т.е., все, что не нравится лично вам - ненормально?
Название: PHP
Отправлено: myst от августа 31, 2010, 11:48
Цитата: jvarg от августа 31, 2010, 11:25
Странный у вас критерий нормальности. Т.е., все, что не нравится лично вам - ненормально?
Когда один и тот же синтаксис имеет разную семантику, это нормально?
Название: PHP
Отправлено: jvarg от августа 31, 2010, 11:56
Я так и не понял, что конкретно вызвало ваше возмущение?
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 12:27
Цитата: myst от августа 31, 2010, 11:48
Когда один и тот же синтаксис имеет разную семантику, это нормально?
Конечно. Это омонимия. Языки без омонимии ненормальны. :eat:

Логично, что $x и $z[1] обрабатываются одинаково? Логично.
Название: PHP
Отправлено: jvarg от августа 31, 2010, 12:41
Цитата: 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() проверяет, существует ли ключ с таким наименованием вообще (не важно, был ли он инициализирован, или нет).
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 12:54
Цитата: 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
Ему кажется, что здесь есть что-то нелогичное.
Название: PHP
Отправлено: myst от августа 31, 2010, 13:17
Цитата: 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
Ему кажется, что здесь есть что-то нелогичное.
Каким образом документирование алогичности отменяет алогичность?
Название: PHP
Отправлено: myst от августа 31, 2010, 13:19
Цитата: jvarg от августа 31, 2010, 12:41
Здесь я ваших воплей вообще не понял.
Try again.

Цитата: jvarg от августа 31, 2010, 12:41
Фукция isset() проверяет, была ли инициализированна переменная. Присваивание NULL не является инициализацией, так как это и есть значение перменной в момент создания.
А функция array_key_exists() проверяет, существует ли ключ с таким наименованием вообще (не важно, был ли он инициализирован, или нет).
Капитан Очевидность попросил подменить?
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 13:49
Цитата: 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
Ему кажется, что здесь есть что-то нелогичное.
Каким образом документирование алогичности отменяет алогичность?
А то, что ключевые слова и индентификаторы обозначаются одинаково — тоже по Вашему алогичность?
Название: PHP
Отправлено: myst от августа 31, 2010, 14:10
Цитата: 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 на анализ.
Название: PHP
Отправлено: arseniiv от августа 31, 2010, 14:28
myst, а вы функций, принимающих ссылки, не видели? Они же примерно так же работают, как этот isset. Или скажете, что можно обойтись без них? (Ну да, можно, можно и без побочного эффекта обойтись, можно вообще на Unlambda писать.)

Если б это было на C++ и если бы в нём частично не было строгой типизации, можно было бы увидеть такие прототипы:
bool isset(&v);
bool somefunc(v);
Название: PHP
Отправлено: myst от августа 31, 2010, 14:38
Цитата: arseniiv от августа 31, 2010, 14:28
myst, а вы функций, принимающих ссылки, не видели? Они же примерно так же работают, как этот isset. Или скажете, что можно обойтись без них?
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?

Цитата: arseniiv от августа 31, 2010, 14:28
Если б это было на C++ и если бы в нём частично не было строгой типизации, можно было бы увидеть такие прототипы:
bool isset(&v);
bool somefunc(v);
Пример вообще не в тему.
Название: PHP
Отправлено: myst от августа 31, 2010, 14:47
Цитата: Demetrius от августа 31, 2010, 13:49
Наоборот, нелогично было бы, если бы семантика isset требовала бы строк в кавычках: везде переменные называются без кавычек, а здесь с кавычками.
Блин, только сейчас понял. Должен быть предикат существования индекса, а такое порно не нужно.
Название: PHP
Отправлено: arseniiv от августа 31, 2010, 14:52
Цитата: myst от августа 31, 2010, 14:38
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?
Как особенный ссылочный nil/NULL/empty/unassigned/что-там-ещё-бывает. Вообще, надо, чтобы все несуществующие вещи имели вид как существующие до инициализации. Тогда там никакая функция не нужна и проверять на равенство nil. Очень хорошая, по мне, идея.
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 15:10
Цитата: 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 (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:
Название: PHP
Отправлено: myst от августа 31, 2010, 15:46
Цитата: 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:
Название: PHP
Отправлено: myst от августа 31, 2010, 15:49
Цитата: arseniiv от августа 31, 2010, 14:52
Цитата: myst от августа 31, 2010, 14:38
Как Вы себе представляете взятие ссылки несуществующего объекта и последствия оного?
Как особенный ссылочный nil/NULL/empty/unassigned/что-там-ещё-бывает. Вообще, надо, чтобы все несуществующие вещи имели вид как существующие до инициализации. Тогда там никакая функция не нужна и проверять на равенство nil. Очень хорошая, по мне, идея.
arseniiv, Вы как обычно на какой-то своей волне.
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.
Название: PHP
Отправлено: Demetrius от августа 31, 2010, 17:00
Цитата: 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 (http://www.php.net/manual/en/function.delete.php) есть.

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

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

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

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


P. S. Истинно говорю вам: что мешает рассматривать isset как функцию, берущую аргумент-ссылку? (Пока справку по PHP не открывал и не знаю, можно ли такое сделать с своими функциями.)
Название: PHP
Отправлено: myst от августа 31, 2010, 17:20
Цитата: 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:
Название: PHP
Отправлено: myst от августа 31, 2010, 17:23
Цитата: arseniiv от августа 31, 2010, 17:18
Цитата: myst от августа 31, 2010, 15:49
Ну так и быть, приведите мне на языке C++ код взятия ссылки несуществующего объекта и результат работы такой программы.
Я не говорил, что то C++. Такому коду мешает спецификация языка, в частности, строгое указание типа. А вот если бы все переменные в этом языке были бы указателями, то код был бы такой (рабочий):

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


P. S. Истинно говорю вам: что мешает рассматривать isset как функцию, берущую аргумент-ссылку? (Пока справку по PHP не открывал и не знаю, можно ли такое сделать с своими функциями.)
Туго-то как... Возьмите же ссылку на элемент массива, не выполняя индексации, а я посмотрю.
Название: PHP
Отправлено: arseniiv от августа 31, 2010, 17:26
Цитата: myst от августа 31, 2010, 17:23
Туго-то как... Возьмите же ссылку на элемент массива, не выполняя индексации, а я посмотрю.
К сожалению, я не знаю ни одного языка, где это можно. Но я могу придумать свой! Вы чего хотите-то? Например, в Lua можно обратиться к несуществующему элементу таблицы и получить nil. Увы, там нет ссылок как отдельной сущности.
Название: PHP
Отправлено: myst от августа 31, 2010, 17:38
Цитата: arseniiv от августа 31, 2010, 17:26
К сожалению, я не знаю ни одного языка, где это можно.
Это ответ на вопрос
Цитата: arseniiv от августа 31, 2010, 17:18
что мешает рассматривать isset как функцию, берущую аргумент-ссылку?

Цитата: arseniiv от августа 31, 2010, 17:26
Вы чего хотите-то?
Я хочу, чтобы Вы наконец вникли в обсуждаемый вопрос и перестали гнать ахинею.
Название: PHP
Отправлено: arseniiv от августа 31, 2010, 19:18
Ладно, перестану. Потому что сам сейчас не могу разобраться, где я написал нелепо, а где без не. (Но мне казалось, что я чуть-чуть к месту, конечно.) Буду наблюдать.
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 09:50
Цитата: 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 робот?
Название: PHP
Отправлено: arseniiv от сентября 1, 2010, 10:43
Offtop
Цитата: Demetrius от сентября  1, 2010, 09:50
в чём такая польза от БНФ
А она не помогает строить трансляторы? Каждой продукции в нерасширенной БНФ соответствует процедура, и так они вместе весь текст разбирают по кусочкам от lexer'а. Можно иначе (не знаю)? (Для простых языков вроде форта, лиспа — конечно, но ведь их синтаксис простой.)
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 10:45
Цитата: arseniiv от сентября  1, 2010, 10:43
А она не помогает строить трансляторы?
Наверное, помогает, не знаю. :donno: Никогда этим не занимался.
Название: PHP
Отправлено: arseniiv от сентября 1, 2010, 10:48
Offtop
Я-то для своего страшного BFormat'а делал... ;D
Название: PHP
Отправлено: jvarg от сентября 1, 2010, 10:53
Цитата: Demetrius от сентября  1, 2010, 09:50
Цитата: jvarg от Myst must be disassembled!!!!
Myst робот?

Ну, "Myst must die" я посчитал несколько грубоватым...
Название: PHP
Отправлено: 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);

Цитата: 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 — функции с разными аргументами. Без объявления не скажешь точно, с какими.
И чего, что разные параметры? Одна из них перестаёт от этого быть подпрограммой?
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 11:19
Цитата: 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 установлен почти на всех хостингах. С этим приходится мириться.
Название: PHP
Отправлено: arseniiv от сентября 1, 2010, 11:29
Цитата: Demetrius от сентября  1, 2010, 11:19
Возможно, и перестаёт. Зависит от языка.
Float(10) в паскале — тоже подпрограмма.
Там нету такого типа. :) Да и не позиционируют как функцию. А вот Exit, Break, Continue — ещё как процедуры.
Название: PHP
Отправлено: myst от сентября 1, 2010, 11:30
Цитата: Demetrius от сентября  1, 2010, 11:19
В аде сантиметры в дециметры неявно не переведёшь.
Я про sizeof говорил, но и это сделано тоже правильно.

Цитата: Demetrius от сентября  1, 2010, 11:19
Возможно, это и удобно, но... как-то громоздко.
Программы предназначены в первую очередь чтения людьми. Проблема ленивых кодеров решается кнутом и пряником, на худой конец — IDE.

Цитата: Demetrius от сентября  1, 2010, 11:19
Function reference перечисляет функции и языковые конструкции, похожие на функции.
Открыл http://www.php.net/manual/en/funcref.php, такого пояснения не вижу.

Цитата: Demetrius от сентября  1, 2010, 11:19
Возможно, и перестаёт. Зависит от языка.
Назовите язык, пожалуйста.

Цитата: Demetrius от сентября  1, 2010, 11:19
Ту же isset удобнее заменить исключениями, но, т.к. они в PHP появились недавно, никто ещё их не использует.
Никогда не любил исключения, особенно для таких целей. Это извращение ещё большее, чем isset, косящий под функцию.
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 11:53
Цитата: myst от сентября  1, 2010, 11:30
Программы предназначены в первую очередь чтения людьми. Проблема ленивых кодеров решается кнутом и пряником, на худой конец — IDE.
Не все программы. Для мелких скриптов (ниша PHP) скорость написания важнее лёгкости расширения и дореработки.

Цитата: myst от сентября  1, 2010, 11:30
Цитата: Demetrius от сентября  1, 2010, 11:19
Function reference перечисляет функции и языковые конструкции, похожие на функции.
Открыл http://www.php.net/manual/en/funcref.php, такого пояснения не вижу.
А где сказано, что там только функции?

Цитата: arseniiv от сентября  1, 2010, 11:29
Цитата: Demetrius от сентября  1, 2010, 11:19
Возможно, и перестаёт. Зависит от языка.
Float(10) в паскале — тоже подпрограммах[size=10].[/size]
Там нету такого типа. :) Да и не позиционируют как функцию. А вот Exit, Break, Continue — ещё как процедуры.
Ой, там предназначался знак вопроса. =))

type
  Float = Real; //кста, разве в Delphi такого нет?
begin
  WriteLn(Float(10));

Разве такое приведение типов не будет работать?

Цитата: myst от сентября  1, 2010, 11:30
Цитата: Demetrius от сентября  1, 2010, 11:19
Возможно, и перестаёт. Зависит от языка.
Назовите язык, пожалуйста.
Например, C, C++, Паскаль.
И не только sizeof, но и макросы (не во всех Паскалях, но в FreePascal'е есть).

Цитата: myst от сентября  1, 2010, 11:30
Цитата: Demetrius от сентября  1, 2010, 11:19
Ту же isset удобнее заменить исключениями, но, т.к. они в PHP появились недавно, никто ещё их не использует.
Никогда не любил исключения, особенно для таких целей. Это извращение ещё большее, чем isset, косящий под функцию.
А в чём проблема?
Название: PHP
Отправлено: myst от сентября 1, 2010, 12:09
Цитата: Demetrius от сентября  1, 2010, 11:53
Не все программы. Для мелких скриптов (ниша PHP) скорость написания важнее лёгкости расширения и дореработки.
Вы про скрипты «Hello, world», что ли? А для доработки программу приходится читать, даже аффтарам, не говоря уже о несчастных, которым приходится читать чужой write-only говнокод.

Цитата: Demetrius от сентября  1, 2010, 11:53
А где сказано, что там только функции?
В названии.

Цитата: Demetrius от сентября  1, 2010, 11:53
Например, C, C++, Паскаль.
И не только sizeof, но и макросы (не во всех Паскалях, но в FreePascal'е есть).
Приведите пример кода на любом из этих языков, где бы f(b) была подпрограммой, а f(a) не подпрограммой. То есть сущность f определялась параметром. Да, и макры сюда не надо приплетать. Это средство модификации кода.
Название: PHP
Отправлено: myst от сентября 1, 2010, 12:11
Цитата: Demetrius от сентября  1, 2010, 11:53
А в чём проблема?
В том, что не для этого они.
Название: PHP
Отправлено: arseniiv от сентября 1, 2010, 12:32
Offtop
Цитата: Demetrius от сентября  1, 2010, 11:53
Разве такое приведение типов не будет работать?
Будет ещё как, но там в справке это обозначается не как функция, а как отдельно приведение типа. Или хотел сказать, что выглядит как функция? Ну это, конечно, да. Кстати, Real есть, а старый Real, что был в паскале, заменён на Real48. А этот синоним для Double (а написание Real, i℧. лучше не использовать).
Название: PHP
Отправлено: Ильич от сентября 1, 2010, 12:57
Для справки.
Этот форум написан на PHP. Назвать его маленьким скриптом - язык не поворачивается. Ругать PHP просто бессмысленно. Имеет смысл сказать: "Вот это лучше". Буду рад узнать об этом. 
Название: PHP
Отправлено: myst от сентября 1, 2010, 13:31
Цитата: Ильич от сентября  1, 2010, 12:57
Ругать PHP просто бессмысленно.
Согласен, лучше закопать.
Название: PHP
Отправлено: Drundia от сентября 1, 2010, 13:46
Цитата: Demetrius от августа 31, 2010, 01:12
Попробуйте заменить
$clause = $entry['extern'];
if (isset($clause)) {


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

Хотя я изсеты не люблю. У меня всё заэчено обычно.
if (@$clause = $entry['extern']){
Название: PHP
Отправлено: myst от сентября 1, 2010, 13:48
Цитата: Drundia от сентября  1, 2010, 13:46
if (isset($clause = @$entry['extern'])){
А @ — это што? :???
Название: PHP
Отправлено: Drundia от сентября 1, 2010, 13:50
Цитата: myst от сентября  1, 2010, 13:48А @ — это што? :???
Это «не сообщать об ошибках».
Название: PHP
Отправлено: Drundia от сентября 1, 2010, 13:56
Цитата: arseniiv от августа 31, 2010, 17:18P. S. Истинно говорю вам: что мешает рассматривать isset как функцию, берущую аргумент-ссылку? (Пока справку по PHP не открывал и не знаю, можно ли такое сделать с своими функциями.)
Можно. Более того, с каких-то пор только так и можно, если ничё назад не поменялось.
Название: PHP
Отправлено: myst от сентября 1, 2010, 15:21
Цитата: Drundia от сентября  1, 2010, 13:56
Можно. Более того, с каких-то пор только так и можно, если ничё назад не поменялось.
То есть Вы хотите сказать, что если я сейчас создам функцию f(a){return a;} и $clause = $entry['extern'] поменяю на $clause = f($entry['extern']) , то предупреждения не будет?
Название: PHP
Отправлено: Drundia от сентября 1, 2010, 15:23
Цитата: myst от сентября  1, 2010, 15:21То есть Вы хотите сказать, что если я сейчас создам функцию f(a){return a;} и $clause = $entry['extern'] поменяю на $clause = f($entry['extern']) , то предупреждения не будет?
Нет, я хочу сказать что можно объявить функцию, которая принимает аргументы по ссылке. Иначе аргументы по ссылке уже не передаются.

И ошибки кстати не будет.
Сравните:

print($a);

и

function f(&$a){
print($a);
}
f($a);


и

function f(&$a){
return $a;
}
print(f($a));



Вероятно ошибки не будет если сделать
f(&$a){return $a;} и $clause = $entry['extern'] поменяю на $clause = f($entry['extern']);
Название: PHP
Отправлено: myst от сентября 1, 2010, 15:31
Щас проверим...
Название: PHP
Отправлено: myst от сентября 1, 2010, 15:38
Действительно нет.
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 19:18
Цитата: myst от сентября  1, 2010, 12:09
Да, и макры сюда не надо приплетать. Это средство модификации кода.
То есть это не код? Не часть языка? :eat:
Название: PHP
Отправлено: Demetrius от сентября 1, 2010, 19:19
Цитата: arseniiv от сентября  1, 2010, 12:32
Кстати, Real есть, а старый Real, что был в паскале, заменён на Real48. А этот синоним для Double (а написание Real, i℧. лучше не использовать).
Во FreePascal'е это по любому синоним Double.  А остальные компиляторы мне неинтересны.
Название: PHP
Отправлено: myst от сентября 1, 2010, 19:28
Цитата: Demetrius от сентября  1, 2010, 19:18
То есть это не код? Не часть языка? :eat:
Макры могут раскрываться в любой текст. Какой смысл их обсуждать? И да, я не считаю их частью языка. Это отдельный язык для преобразования текста, причём любого текста. То, что их влепили в стандарт C, так это от нищеты самого С.
Название: PHP
Отправлено: oort от сентября 1, 2010, 20:44
Цитата: myst от сентября  1, 2010, 19:28
Макры могут раскрываться в любой текст. Какой смысл их обсуждать? И да, я не считаю их частью языка. Это отдельный язык для преобразования текста, причём любого текста.
Особенно в лиспе.
Название: PHP
Отправлено: myst от сентября 1, 2010, 21:22
Цитата: oort от сентября  1, 2010, 20:44
Цитата: myst от сентября  1, 2010, 19:28
Макры могут раскрываться в любой текст. Какой смысл их обсуждать? И да, я не считаю их частью языка. Это отдельный язык для преобразования текста, причём любого текста.
Особенно в лиспе.
Мы не про лисповые макры говорим.
Название: PHP
Отправлено: oort от сентября 1, 2010, 21:37
Я увидел эту тему поздно, когда почти все копья уже сломаны, но все же чуть-чуть добавлю. На мой взгляд, самый страшный грех рнр -- это его ужасающая непродуманность и бессистемность. Спецмальные формы, которые и в том же лиспе есть -- это мелочь по сравнению с разными функциями mysql_connect, pg_connect, sqlite_connect и иже с ними.
Название: PHP
Отправлено: myst от сентября 1, 2010, 21:45
Цитата: oort от сентября  1, 2010, 21:37
На мой взгляд, самый страшный грех рнр -- это его ужасающая непродуманность и бессистемность.
Так ить наколеночная поделка. Что от неё ещё ждать? :donno:
Название: PHP
Отправлено: oort от сентября 1, 2010, 22:07
Зато ближе к естественным языкам.  :)
Название: PHP
Отправлено: myst от сентября 1, 2010, 22:08
Пичаль. :(
Название: PHP
Отправлено: Python от сентября 2, 2010, 00:30
Интересно, в пхп собираются вводить средства для работы с юникодовскими символами?
Название: PHP
Отправлено: Drundia от сентября 2, 2010, 01:36
А в чём проблема с ними?
Название: PHP
Отправлено: Python от сентября 2, 2010, 02:00
Цитата: Python от сентября  2, 2010, 00:30
А в чём проблема с ними?
В отсутствии нормального внутреннего представления для 16- или 32-разрядных символов. И строка в windows-1251, и строка в utf-8 рассматриваются лишь как последовательность байтов — таким образом, одна буква кириллицы для php уже является двумя символами в utf-8 или одним в windows-1251. В результате, программы, предназначенные для работы с кириллицей и другими алфавитами, получаются сложнее: например, искать один символ проще, чем подстроку из двух. Код, написанный для восьмибитных кодировок, труднее приспособить для юникода. И т.д., и т.п.
Название: PHP
Отправлено: Drundia от сентября 2, 2010, 02:41
По-моему там уже разные фокусы для этого есть.
Название: PHP
Отправлено: Python от сентября 2, 2010, 02:54
Цитата: Drundia от сентября  2, 2010, 02:41
По-моему там уже разные фокусы для этого есть.
Например?
Название: PHP
Отправлено: Drundia от сентября 2, 2010, 03:41
Ну хотя бы http://www.php.net/manual/en/book.mbstring.php
Название: PHP
Отправлено: Python от сентября 2, 2010, 04:05
Много всего нужного, но не вижу, как с помощью этих функций вытащить из произвольной строки n-ный символ и, например, заменить его другим символом. В простейшем случае, все, что мне нужно — элементарный парсер для utf-8, возвращающий массив из кодов символов строки, плюс набор функций, аналогичных функциям для обычных строк, но работающий с таким массивом. Ну и обратный конвертер в utf-8 и другие кодировки.
Название: PHP
Отправлено: Drundia от сентября 2, 2010, 04:56
Цитата: Python от сентября  2, 2010, 04:05
Много всего нужного, но не вижу, как с помощью этих функций вытащить из произвольной строки n-ный символ и, например, заменить его другим символом
Через попу. К примеру так:
function mb_substr_replace($s, $n, $r){
return mb_substr($s,0,$n-1,'utf-8').$r.mb_substr($s,$n,0x7fffffff,'utf-8');
}
echo mb_substr_replace('йцукенгшщзхї', 5, 'z');
// йцукzнгшщзхї
Название: PHP
Отправлено: myst от сентября 2, 2010, 08:40
Цитата: Python от сентября  2, 2010, 00:30
Интересно, в пхп собираются вводить средства для работы с юникодовскими символами?
Так это поделие и Уникод не поддерживает? Закопать!
Название: PHP
Отправлено: Demetrius от сентября 2, 2010, 09:46
Цитата: myst от сентября  2, 2010, 08:40
Так это поделие и Уникод не поддерживает? Закопать!
Lua тоже не поддерживает, и что?
Название: PHP
Отправлено: myst от сентября 2, 2010, 11:11
Цитата: Demetrius от сентября  2, 2010, 09:46
Lua тоже не поддерживает, и что?
Как что? Закопать, конечно.
Название: PHP
Отправлено: jvarg от сентября 2, 2010, 12:02
Миста?
Название: PHP
Отправлено: myst от сентября 2, 2010, 12:11
Цитата: jvarg от сентября  2, 2010, 12:02
Миста?
Нет, PHP, Lua и jvarg.
Название: PHP
Отправлено: jvarg от сентября 2, 2010, 12:32
Цитата: myst от сентября  2, 2010, 12:11
Нет, PHP, Lua и jvarg.
Последний в списке - юникод поддерживает... :smoke:
Название: PHP
Отправлено: myst от сентября 2, 2010, 12:37
Цитата: jvarg от сентября  2, 2010, 12:32
Последний в списке - юникод поддерживает... :smoke:
А его как пособника первых двух. :green:
Название: PHP
Отправлено: Bhudh от сентября 2, 2010, 14:27
Цитата: mystпособника
Пособник не должен был бы поддерживать... :what:
Название: PHP
Отправлено: myst от сентября 2, 2010, 14:30
Цитата: Bhudh от сентября  2, 2010, 14:27
Пособник не должен был бы поддерживать... :what:
Следствие не проведёшь. ;)
Название: PHP
Отправлено: jvarg от сентября 2, 2010, 17:21
Проклятые тоталитарные палачи...

Свободу PHP!!!
Название: PHP
Отправлено: myst от сентября 2, 2010, 18:25
Свободу Чикатило!
Название: PHP
Отправлено: Python от сентября 2, 2010, 20:44
Да прибудет с вами чучхе!
Название: PHP
Отправлено: Bhudh от сентября 2, 2010, 21:11
Да прѣбѫдєтъ съ нами чукчо!
Название: PHP
Отправлено: Demetrius от сентября 3, 2010, 08:13
Цитата: Python от сентября  2, 2010, 20:44
Да прибудет с вами чучхе!
И все мы немного чучхе...
Название: PHP
Отправлено: Bhudh от сентября 3, 2010, 08:22
Demetrius, в семантик-асках можно исключать часть результатов из вывода?