Pull to refresh

Comments 135

"P.S. Чур вопрос когда будет goto в PHP не предлагать.."
Уже анонсирован? 8)
В PHP6 эти функции будет выполнять обновлённый break
Полноценный goto никогда. В CSV 5.3 бранча уже закомичен оператор jump. Это урезанный вариант goto.
- Когда наведут порядок в названиях функций?
Каких конкретно функций?
Ну это из разряда холивара вопрос.
Я имею ввиду неразбериху с именованием.
Например функции для работы с массивами начинаются на array_ но функция sort() почемуто не начинается.

Тоже самое касается строк. Например есть пачка функций начинающхся с str а есть такие которые начинаются на str_, и ещё есть такие которые без префиксов.

Не скажу что это критично, но было бы интуитивно понятнее если бы был какойто стандарт. Ну и вообще -стандарты это хорошо. Особенно это касается именования функций.
насколько я помню там уже начинают вводить более правильные алиасы для имен.
UFO just landed and posted this here
ещё есть strip_tags() но stripslashes()
Ну в целом это можно сформулировать как "Отсутствие стандарта в именовании фунцкций".
А примеров - особо искать не надо.
обратную совместимость в любом случае надо оставить. хостеры даже с 4 версии все еще не все перешли ;)
Кстати да - у меня большая часть пользователей моего небольшого плугинчика для Wordpress сталкиваются с проблемами только потому, что хостер не перешёл на PHP 5.
Пора уже переходить на PHP5, обратная совместимость большая. Такое ощущение, что админам таких хостингов просто лень скомпилировать PHP5
И разнесут их по классам, превратив в методы.
— Назовите любимый трюк/необычное использование какой-то функции, которое вы когда либо видели.
— Будет ли множественное наследование наконец взято из зенд-ядра и добавлено в сам PHP?
— Когда наконец разберутся с __CLASS__? Нет ли идеи сделать вместо неё две функции: одну, в которой возвращается класс, в которой метод описан, и вторую, в которой возвращается реальный тип объекта? Если верить сообщениям тут, то поведение функции get_class, схожей по функционалу нестабильно, т.е. меняется от версии к версии, если верить комментам к странице.
исходя из описания php6 соответственно вопрос - синтаксис php аккуратно близится к синтаксису перла?
когда можно будет писать такое?
element4 = getSmthList()[3]
А зачем? Чтобы все не было слишком просто? =]
Просто мне не понятны причины, по которым не работает.
getSmthList() - это массив, но почему-то не могу с него взять значение - это странно.
Логически, возможно, Вы правы, но вот практически, это бережет кодеров от
$var_0 = getSomeVar()[0];
$var_1 = getSomeVar()[1];
$var_2 = getSomeVar()[2];
$var_3 = getSomeVar()[3];
т.к. это вызовет функцию 4 раза.

Т.е. либо получаем весь массив, либо не даем функции отдавать массив. Это удобно и практично, а если нужна логика надо использовать Си или производные от него ;-)
Возникает резонный вопрос: получается, что Javascript кодеров не бережет или как? ;-)
Ну, вообще, Javascript можно назвать производным от Си =]
ИМХО, козырь [для кого как] PHP в том, что в его реализации часто практичность часто важнее логики. =]
До тех пор, пока логика не превращается в вязкое тесто, не так ли? ;-)
Написать херовый код можно и без этого :) Дело прямоты рук программиста. for тоже будет вызывать функцию повторно...
что выведет на экран следующая конструкция?:
$arr = false;
echo count($arr);
согласитесь что было бы логичнее если бы возвращало 0.
UFO just landed and posted this here
Если читать документацию, то понятно, что 1-й случай - фича, а второй - особенность оператора ==
Тут логичнее использовать ===
Тут все логично. При сравнении == оба операнда приводятся к одному типу (ведь только такие и имеет смысл сравнивать, ведь так?) В данном случае к int. 'String' в int - это 0.
UFO just landed and posted this here
Функция count() применима для массивов. А так как в языке слабая типизация, то $arr автоматически преобразовывается к массиву {0=>false}. В нем 1 элемент, вот и возвращается 1. Все верно.
Тогда будет куча труднонаходимых ошибок. Данным кодом я хочу узнать количество элементов $arr, а какие у него значения — совсем другое дело. Логично возвращать 0 — когда значение $arr NULL или array(), так сейчас и есть.
Так это ведь не массив.
На мой взгляд, это тоже ведёт к появлению труднонаходимых ошибок.

Думаю, следует выводить нотис или стрикт при передаче count не массива и не объекта. Как считаете?
Строка - это массив. Элементы такого массива - символы строки. И это как раз очень облегчает жизнь =)
Если вызвать $arr[1], где $arr = 'hello', мы получим 'e', т.е. строку можно с натяжкой назвать массивом, где элементы - символы. Хотя в данном случае, строка - это массив с одним элементом.
А вот это уже часто помогает не заморачивать себя проверками строка это или массив, при отсутствии жесткой типизации.
В приведённом примере смысла я так и не нашёл :)
$arr[0] хранит 'h'. В итоге имеем тот же массив
Строка очень похожа на массив.
Но для строки вместо count() есть strlen().
а что вас удивляет? так может поможет?

$arr = false;
var_dump((array)$arr);

все эти глупые вопросы из-за незнания или непонимая type juggling... неужели вы думаете, что разработчики PHP и впрямь такие наивные идиоты?? поверьте, они на шаги впереди вас, предупреждая появление ошибок в ваших же скриптах, когда-нибудь вы это поймёте.

тут когда-то выступал один, тоже все рассказывал про «идиотизм в php», очень гордился тем, что перешел на python, хотя сам не понимал элементарных вещей в php. Наверное он сейчас и python уже забросил, видимо тоже из-за «идиотизмов в python»…


лично я
хм.. откуда тут "лично я"... :) ну ладно, лично я люблю и php и python и бесконечно восторгаюсь гениальностью, усердием и трудолюбивостью создателей этих языков
Насчет гениальности создателей PHP я бы поспорил. Многовато косяков для языка с 13-летней историей.
ну,создайте свой язык программирования. и давайте не будем... каких косяков?
Чисто наскидку:
1. type-hinting в языке с неявной типизацией (Однако JS как-то работает без type-hinting, странно да?).
2. нет единого соглашения в именовании функций (знаю-знаю. исторически сложилось, ага).
3. нет единого соглашения по обработке ошибок. PHP применяет warnings, fatals, catchable fatals, exceptions. (тот же JS любую ошибку выполнения скрипта сводит к exception).
4. нет возможности использовать позднее статическое связывание (обещали в ветке 5.3, но где
этот релиз?).
5. передача по ссылке/значению. Почему объекты всегда передаются по ссылке, а массивы - нет?
6. autoload. Хуже решения проблемы отсутствия линковщика в PHP придумать сложно.

И после этого вы будете говорить, что PHP - самый самый? некоторые реализации JS на порядок качественнее сделаны, чем PHP.
ваша конструкция приводит $arr к типу array а потом выводит его.
видимо по такому же алгоритму и работает count().
но не кажется ли вам что было бы логичнее вернуть 0 или false если $arr не массив?
конечно же нет. читайте мануалы...

здесь нет чёткой типизации. данные приводятся к требуемому типу. вот и всё.

щяз вы еще сильнее удивитесь:
var_dump((string)false);
var_dump((string)true);
1. Зачем нам всем переходить на php6 (какие реальные преимущества кроме Unicode)?
2. Нет ли у разработчиков идеи отказаться от функций по работе с массивами, и перенести ВЕСЬ функционал, связанный с массивами в SPL?
3. Собираются ли разработчики расширять "влияние" PHP на соседние области: применение на десктопах, мобильных устройствах. То есть идти по пути Java.
4. Каково официальное мнение разработчиков PHP по поводу технологии .NET? Есть ли планы по интеграции .NET в приложения, написанные на PHP (jgznm же официальной, а не сторонними костылями)?
И наконец:
5. Как же все-таки пропатчить KDE2 под FreeBSD????
1) Когда будет нормальная работа с MSSQL
2) Будет ли создаваться БД SQL специально для PHP
2) Будет ли создаваться БД SQL специально для PHP
SQLite?
А что для вас было бы "то"?
"Когда будет нормальная работа с MSSQL"
Уже.
А ссылки можно на доки?
да уже есть нормальный, а также у microsoft c zend есть договорености, о совместной разработке драйвера.
очень хочется узнать о "настоящей" многопоточности в PHP.
нафик многопоточность в вебе? php web friendly язык, а потом уже все остальное.
UFO just landed and posted this here
UFO just landed and posted this here
без доработок языка не станет)
есть много людей, которым нужно то, что не нужно вам
почему вы еще разбежались получше чтобы убицо апстену? (:
почему нет нормального корного фриварного компилятора в байт код с последующим использованием этого байт-кода?
Потому что любой тогда сможет написать свой энкодер и никто не будет покупать зендовский за ~1000 баксов...
нет, я не о том, что каждый может писать. Пусть код будет зашифрован понятным только этому энкодеру способом.
тогда вопрос в другом, сколько % получают разработчики ядра php при продаже зедновского энкодера?
Помоему большая часть разработчиков ядра PHP работает в том же Зенде и, как мне кажется, работают они там не на % от продаж... ;-)
Будет ли когда нибудь строгое типизирование (список параметров и тип возвращаемого результата), полиморфизм.

PS: ведется ли оптимизация самого PHP, хотя это может решится, если будет сделано что-то типа байткода в Java, возможно сделать так, что бы можно было использовать и текстовый формат (как сейчас), так и компилить код
>Будет ли когда нибудь строгое типизирование (список параметров и тип возвращаемого результата), полиморфизм.
Строгое типизирование уже есть для массива, для остальных типов - противоречит основным идеям РНР.
Полиморфизм - тоже.

>возможно сделать так, что бы можно было использовать и текстовый формат (как сейчас), так и компилить код
Zend Encoder, Zend Optimizer, eAccelerator и т.д. не подходят?
компиляторы очень дорогие
eAccelerator - open source. Не совсем компилятор правда :)
разработчик не может выборочно использовать скомпилированный байт-код
и не стандартизированы совсем
Не только для массивов, но и для объектов. Нет для простых типов, таких как int, string и т.д....
Не раз этот вопрос поднимался разработчиками РНР. Сошлись на том, что это противоречит свободной типизации, которая есть сейчас.
> Zend Encoder, Zend Optimizer, eAccelerator и т.д. не подходят

Это не совсем то, чего хотелось бы. Например на локальной машине я буду использовать код в текстовом виде, а на продакшн мне бы хотелось не ставить доп. програмы, а скомпилить весь сайт и залить. Это прирост в скорости работы и без разных дополнений. ИМХО это было бы удобно
Каким образом "без дополнений"? Для компиляции в байт-код в любом случае придётся ставить дополнения.
Компилировать сайт было бы не так удобно, как использовать акселераторы.
а разве полиморфизм в PHP отсуствует? Абстрактные классы, интерфейсы.
на сколько я знаю я не могу написать draw(Cicrle $c) {...} и draw(Line $l) в одном и том-же класе. Конечно, это ограничение обойти можноЮ но это костыли - не лучше ли сделать это на уровне ядра )

по поводу строгого типизирования - не могу сказать как это отразится на скорости, но может можно объединить оба подхода? во многих ситуациях типизирование полезно, но как я уже сказал - возможно это сильно отразится на скорости, а если так - то не надо ), хотя оптимизаторы байт-кода могут это хорошо оптимизировать.
можешь.
если Circle и Line наследники одного родителя Figure, то function draw(Figure $fig); очень даже работает
в PHP типы int, float, string являются классами такими же как и stdObject, Array (то есть не атомарные как в С) и мне тоже вот не понятно, почему нельзя сделать строгую типизацию.
>ограничение обойти можноЮ но это костыли
Это не костыли, а просто "не так, как вы привыкли". Если, конечно, мы думаем об одном и том же способе применения полиморфизма.
Быть может, код, предлагаемый вами, красивее (хотя это тоже спорно). Но говорить, что PHP не поддерживает полиморфизм - глупо.

Строгое типизирование. Зачем? Это РНР, а не С. В РНР есть множество функций приведения типов, использование которых очень удобно.
Это лишний код - определение типа. Если этот код на C - он быстрее чем вызов ф-ции на PHP
Для определения типа вызывается конструкция instanceof, исходный код которой написан на C
Может я ошибаюсь, но draw(Figure $fig) а не draw(Cicrle $c) {...} и draw(Line $l) {...} - это не полиморфизм
Полиморфизм, как и остальные принципы и паттерны ООП, в большей степени зависят от программиста, и в меньшей - от языка.
В сторону РНР4 можно плюнуть за то, что он предельно слабо поддерживает ООП, с этим я согласен. Но РНР5 реализует основные принципы ООП, это главное. При этом можно смело сказать, что РНР - не на 100% ОО-язык, как C++ и Java, и требовать от него повторения каждой возможности этих языков нельзя. Каждый язык своеобразен, иначе их называли бы одинаково :)

"Не полиморфизм" - это Code Monkey вместо программиста или паскаль вместо языка.
С каких пор Java и C++ являются 100% ОО-языками? Имхо, единственный толковый 100% ОО-язык —
это Smalltalk. Все остальное - вариации на тему.

И, кстати, что вы лично имеете против паскаля? Уточню: против Borland Pascal? ;-)
Согласен, несколько ошибся :)
Но это дела не меняет.

Ну, паскаль я не люблю ещё с учёбы - личная взаимная неприязнь :)
Для понимания основ программирования - самое то. Но полиморфизма на нём я и представить не могу :)
Возможно я Вас удивлю, но паскаль (Borland Pascal) очень даже позволяет делать полиморфизм, потому что полиморфизм - основа основ ООП, наряду с инкапсуляцией и наследованием. Если рассматривать дотошно, то некоторые вещи в BP реализованы удачнее, чем в C++. Видимо нелюбовь к паскалю у Вас сложилась из-за его морального устаревания к моменту, когда вы стали его изучать. А зря.
Вы правы, нелюбовь к паскалю у меня как раз из-за этого :)
А насчёт ООП в нём - я действительно глубоко не вникал, вполне могу ошибаться
Ошибаетесь. Полиморфизм как раз таки использовать draw(Figure $fig). То, что вы подразумеваете под полиморфизмом - называется перегрузка методов :)
перегрузка методов в PHP тоже работает, хотя не в полном объёме как в С++.
да, точно, перепутал.... Сори за путаницу, но имел ввиду действительно перегрузку ф-ций в одном класе
раз уж вопрос в деньгах и компилятор из области анриал, то какие механизмы ускорения обработки и опримизации кода будут добавлены?
Может добавить поддержку чего-нибудь наподобие:





Реализовать это возможно... тот же самый "include" только в теле документа.
PHP от этого не пострадает, разработчики ж спасибо скажут. Нужно идти на шаг вперёд, пока кто-нибудь не реализовал (наверное) подобное .
Имелось ввиду:




Глюк какой то... сорри - смотрим выше видим следующее:
<?perl   ...    ?>
<?ruby   ...   ?>
<?python ... ?>
Нифига себе!!! А зачем такое?
Типа страничка HTML, в которую встроен код PHP, в который встроен код Ruby???
Связка HTML+PHP в одном флаконе (в одном файле) уже породила миллионы быдлокодеров и перлы индийского кода, а Вы хотите еще усугубить эту ситуацию???
Не так: HTML => [ php | rubu | perl | python ] - это в идеале.
Для авторов PHP для PHPConf предложение: PHP => [ rubu | perl | python ] - чтобы начать с чего то.

На счёт связки HTML+PHP и "быдлокодеров".

Вот так реализуется связка (правда другая) в SHTML (POST не поддерживается):
   <!--#include virtual="/cgi-bin/script.cgi?$QUERY_STRING"-->

А это уже PHP (С поддержкой POST, с извратом его передачи в script.cgi):
<?php
   include ("/cgi-bin/script.cgi?$QUERY_STRING");
?>


И что? Да это удобно, но не всем и не во всём :)
Подумайте, что было бы если работала вышеприведённая связка, думайте не в сторону "быдлокодеров" в другую - ибо писать можно хорошо или просто ужастно на любых языках программирования.
Да, но, извините, зачем???
Зачем писать проект на 3-х разных языках???
Ведь это же соблазн захламления кода.
Пока у Вас есть возможность, но она неудобна, вы будете вынуждены
использовать ее редко и, как следствие, обдуманно, продумывая архитектуру приложения.
Даже если у Вас в команде программисты с разными языками Вы вынуждены будете заставлять их писать нормальные модули, а потом использовать их, а не тупо лепить вставки кода на разных языках...
Попытаюсь объяснить кратко.

Я лично пишу на Perl, а PHP лишь знаю образно. Желания переходить на PHP нет (но это не значит, что он хуже, он просто ДРУГОЙ), хотя у него я вижу (для меня) два основных преимущества при работе с HTML:
1. Эта самая "связка" HTML+PHP в одном флаконе" - не нужно плодить файлы.
2. Упрощённый вывод данных POST и GET - иногда не нужны сложности.

Из вышесказанного следует, что лично меня бы связка HTML+PERL вполне устроила, в крайнем случае PHP+PERL (PHP использовал бы только для print'а).

Но дело не только в этом. Довольно много модулей у нас на Perl, может уже побольше на PHP, не знаю. Реализованное в одном языке программирования не всегда реализовано в другом. Таким вот образом возможно было бы частично решить проблему.
"лично для меня" если для себя то да.
а клиенту как такое "фтюхивать"?
Разве клиент (заказчик) прописывает в договоре (ТЗ), что ему выдай всё на PHP пожалуйста?
да канечно, не знаю как, но у нас в договоре есть пункт "технические требования".
и для командной разработки этот венегрет просто не годится. (:
Согласен - слишком сложно для клиента.

Но если вернуться к вопросам авторам PHP, то меня бы венегред из PHP и PERL устроил :)
А интересно получается:

<?php
   while (list($key, $val) = each($_POST)) {
      $post_text = "$val"; // Допустим у нас одна форма с текстом
   }
?>
...
<?perl
    # Обозначаем в тексте гиперссылки;
   $post_text =~ s|(http://.[^\ ]+)|<A href=\"$1\">$1|g;
?>
...
<?php
   echo "$post_text";
?>
бугага, ну если сильно хочется - модуль для апача написать не сложно. (: думаю это уже ктото написал (:
Может... но не встречал. А модуль написать теоретически наверно всё таки можно, чтобы работала любая "связка". Вот только эта самая работа непонятно как будет связывать переменные (окружения и не только) между различными языками программирования.
в php5.3, релиз уже близится.
Когда мы получим возможность разрабатывать на PHP полноценные серверы приложений а-ля Tomcat/Java servlets вместо одноразовых "скриптов"?
А чем тогда будет зарабатывать Zend?
А пусть веники на базаре продают ;-) Имхо, монетизация PHP движка, положенная в основу бизнеса Zend, еще не раз сыграет свою [отрицательную] роль в развитии этого языка. Не удивлюсь, если в обозримом будущем мы увидим оп-коды "не для всех" внутри ZendEngine.
Имеет ли смысл перенести функционал некоторых паттернов (например Singleton) в php?
не имеет :)
паттерны всего лишь описание решений, это не готовый код. В разных ситуациях реализация одного паттерна может отличаться.
хотелось бы, чтобы при объявлении функции можно было указать типы входных аргументов..
если аргумент пришел другого типа - сразу warning

к примеру:
myfunction(string $a, array $b, integer $c, object $d){......}
Не думаю, что это призыв к переходу на строгую типизацию в PHP, а для аргументов функций и методов это в отдельных случаях действительно могло бы быть полезно.
Есть способ это сымитировать, достаточно простой и удобный:

1) убираем E_RECOVERABLE_ERROR из основного потока;
error_reporting ((E_ALL | E_STRICT)&~E_RECOVERABLE_ERROR);
set_error_handler('send_error',E_STRICT | E_ALL);


2) в функции-отловщике ошибок делаем switch от кода ошибки;
function send_error($msg,$str,$file,$line,$context){
  if(error_reporting())
    switch($msg)
    {
      case E_RECOVERABLE_ERROR:
      send_recoverable_error($msg,$str,$file,$line,$context);
      break;
      default:
      ………
    }
}


3) если пришёл E_RECOVERABLE_ERROR, проверяем строку ошибки на соответствие вот так:
function send_recoverable_error($msg,$str,$file,$line,$context){
  if(!preg_match('#instance of ([\w0-9_:]+), (\\1) given#', $str))
    die('Тайпхинтинг нах… файл '.$file.' строка '.$line);
}


Сразу говорю — использовал вполне удачно, но использовать очень часто не рекомендую: сотня-полторы таких вызовов вполне могут начать тормозить скрипт на несколько ms.
когда появится кастинг !?

не преобразование (int)'123asd' (->123), а просто как подсказка IDE(и компилятору!?) с каким "типом" я собираюсь в данный момент работать.

хочется удобства в ситуациях вроде такой:
$customClassInstance = (CustomClass)unserialize($str);
и тут-же в IDE в автокомплите видеть методы CustomClass, а не «фигпоймчего»...
но это только наши мечты :)
На всякий случай озвучу в качестве самостоятельного вопроса.

Планируется ли полный переход на ООП на уровне встроенных функций путём создания систематизированной совокупности стандартных классов и превращения встроенных функций в методы этих классов? Например, все функции с префиксом array_ этого префикса лишатся и станут методами класса array. Про 5.3 не говорю, но хотя бы в шестёрке или, ммм… будущих версиях.

И попутно: как насчёт перехода на более традиционный ныне «верблюжий» синтаксис (подобно используемому в JavaScript или, например, при работе с DOM-расширением в PHP5)? Например, применительно к потенциальному объекту array метод мог бы называться walkRecursive вместо walk_recursive.

Спасибо.
Кстати, когда и где могут быть озвучены ответы помимо собственно конференции? ;-)
1. Резюмируя множественные вопросы о компиляторах в байткод и подобном: Какой баланс собираются авторы PHP соблюдать между коммерческой выгодностью и общественной доступностью PHP? Есть ли такой баланс вообще (в смысле обозначен ли он, или всё решается раз от раза, на ходу)? Не дойдёт ли коммерциализация PHP до уровня MySQL & utilities, в которых for free можно получить только минимум "достаточный и необходимый", а всё остальное — уже moneyware.

2. PHP часто критикуют за исторически сложившийся разброд именований (функций, констант) и за перегруженный global namespace. Собственно, вопрос не в том, когда, а в том, какие рассматриваются пути решения этой проблемы самими разработчиками? Какие имеют шансы на успех и на какие "делать ставки", формируя свои собственные стили кодирования? namespace per module? namespace per entity? или может даже вложенные namespaces? Или есть что-то более красивое?

3. В продолжение предыдущего вопроса. Может быть всё-таки пожертвовать обратной совместимостью ради будущего развития? Кардинально и радикально. Хотя бы на этапе смены major-версии. Хотя бы разово между 5 и 6, или между 6 и 7 версиями. Реально заметно как тяжёл стал для PHP груз совместимости.

4. Какие у вас там планы по популяризации языка? Его внедрение в массы за рамками webdev'а? Расширение роли и доли в webdev'е? Внедрение в корпоративные мегасистемы? Или всё оставлено на самотёк?

5. Немножко наивный вопрос. Так как язык PHP сейчас позиционируется как webdev-язык (та же HTML+PHP интеграция), то в свете наступающего "вебдваноля" и прочего сложно-структурного программирования, будет ли развиваться сам язык (ну или его дефолтная комплектация) в сторону упрощения всеё это "социальной" разработки и манипулирования сущностями более высокого порядка, чем массивы, переменные и даже объекты (например, сервисы, "родное" внедрение всяких ORM'ов, REST'ов и т.п; вполне так возможно что и средствами этих самых функций-массивов-переменных-объектов); или же эта область оставлена на откуп фреймворкам и язык ни в коем случае ради таких веяний моды меняться не будет? Не боитесь ли в таком случае проиграть языкам вроде Python & Rails, для которых есть практически неотлучные от них фреймворки (Ruby on Rails), из-за которых код на этих языках для одного и того же проекта в разы меньше, чем на PHP?

Вот, пожалуй, всё. На пока что.
Когда будет реализовано (и будет ли):
class A {
private $obj = new Object();
}

вместо того, что бы в кострукторе создавать объект.
+ не только объекты создавать, а делать например private $str = 'Hello '.CONSTANT
UFO just landed and posted this here
SPHINX: как растет производительность индексов типа gist/gin в postgres 8.3 в сравнении с предыдущими
Причем тут Sphinx?
И Postgres?
Заканчиваем - собирать вопросы :-)
Осталось 2 недели до PHPConf
Sign up to leave a comment.

Articles