Вышел Июньский номер PHP Inside!

Нужен ли PHP Inside русскоязычному сообществу?

  • Да, несомненно. Развивайте проект и дальше.

    Голосов: 79 90,8%
  • Да нужен, но с другой концепцией и в другом виде.

    Голосов: 4 4,6%
  • Нет, хватает статей в сети.

    Голосов: 1 1,1%
  • Проходил мимо. Сигаретки не будет?

    Голосов: 3 3,4%

  • Всего проголосовало
    87
  • Опрос закрыт .

nw

Новичок
Вышел Июньский номер PHP Inside!

Всем привет.
Вот и подоспел наш первый летний выпуск журнала. Надеемся, что летнее настроение только способствует чтению статей о PHP. Читайте, обсуждайте в форуме и, конечно, участвуйте в создании новых номеров.
Внимание: сменились контактные адреса редакции. Теперь по всем вопросам пишите прямо на nw AT phpinside.ru или на nw AT phpinside.net.
http://detail.phpclub.net/pages/phpmag.phtml
 

Фанат

oncle terrible
Команда форума
если убогое качество пдфного текста еще можно терпеть, то качество кода - ниже плинтуса.
рекомендую хотя бы тег болда добавлять при раскраске, что ли.
 

fisher

накатила суть
если кто вдруг попробует искать по ссылкам автора статьи по ORM (Kieran Mathieson) - то вот его страница:
http://www.sba.oakland.edu/faculty/mathieson/research.
но ничего про ORM кроме ссылки на пхпбилдер там, увы, нет. сама же статья в пхпбилдере имхо слишком поверхностная.
 

Profic

just Profic (PHP5 BetaTeam)
Очень сырой журнал (по крайней мере про php5 написано сыро)
1) В тексте написано __destructor () в коде __destruct () (что правильно)
2) В тексте написано instanceof в коде instance of (что неправильно)
3) Большая путаница с clone и object::__clone() (в разных местах по разному написано, причем не только в тексте, но и в коде - даже есть где в тексте написано правильно, а в коде нет):
a) использовать __clone на объкте нельзя - compile error обеспечен
b) использовать $that в __clone () недопустимо, в связи с тем что __clone () вызывается после того, как все свойства будут скопированы.

Вот пример оригинальный
PHP:
<?php
class Node {
    private $next;
    private $name;
    function __clone() {
        $this->name = $that->name;
        $this->next = null;
    }
    function setName($name) { $this->name = $name; }
    function getName() { return $this->name; }
    function setNext(Node $next) { $this->next = $next; }
}
$n1 = new Node();
$n1->setName('Node1');
$n2 = new Node();
$n2->setName('Node2');
$n1->setNext($n2);
$n = $n2->__clone();
print_r($n);
?>
На что php (PHP 5.0.0RC3 (cli) (Zend Engine v2.0.0RC3 with Xdebug v2.0.0dev) отвечает:
Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead in - on line 18
И вот как этот код должен был выглядеть
PHP:
<?php
class Node {
    private $next;
    private $name;
    function __clone() {
        $this->next = null;
    }
    function setName($name) { $this->name = $name; }
    function getName() { return $this->name; }
    function setNext(Node $next) { $this->next = $next; }
}
$n1 = new Node();
$n1->setName('Node1');
$n2 = new Node();
$n2->setName('Node2');
$n1->setNext($n2);
$n = clone $n1;
print_r($n);
?>
ЗЫ. Код как оказалось вообще был изначально лишен смысла, т.к. копироваля, объект, который был выдомым, а не ведущим...

---add---
Я не понимаю почему все пишут, что только в 5 версии стало возможным инициализировать свойства классов не в консрукторе, а непосредственно в объявлении? Это было доступно еще в php4 (но только простыми типами). В php5 с обычными и статическими свойствами ситуация изменилась, но совсем не так. Их можно инициализировать как хочешь (ну почти :))
PHP:
<?php
class a {
static $q = array ('a', 'b', 'c');
}
var_dump (a::$q);
?>
вывод:
Код:
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}
В php 4 такая конструкция вызовет parse error...

---add---
function myFunction(Unrequired $param = null) {
Такая конструкция недопустима (вернее допустима, но не имеет абсолютно никакого смылса), т.к. NULL никогда не является предком в наследования (о чем, кстати, написано в журнале на один абзац выше). Возможно только
function myFunction(Unrequired $param)...
или
function myFunction($param = null)...

---add---
Хотя PHP5 beta 3 этот алгоритм проработан не полностью (__toString() срабатывает только во время использования указателя на объект в операторе print), это открывает интересные перспективы.
В PHP5RC3 __toString () вызывается только при использовании в echo или print. И это не будет, видимо, менятся из-за каких-то проблем в ZE2:
news.txt про php5rc1:
- Changed __toString() to be called automatically only with print and echo statements. (Andi)
...
- Fixed bug #27125 (strval() doesn't work for objects with __toString()). (Marcus)
====================

Ребят ей-богу, хотя бы примеры прогнали про php5. И увидели, что там полно глюков и несостыковок, вылезли в форуме с вопросами, а там и я нашелся :) (и, естественно, поправил бы оригинал перед публикацией)
 

Фанат

oncle terrible
Команда форума
хе. убрал смуф текст - код стал шикарный, а текст - ужасный :)
в общем, размытый синий по голубому - это кошмар
 

Nirva

Dmitry Polyakov
в редакцию Профика, в редакцию! главным инженером! =)
 

Profic

just Profic (PHP5 BetaTeam)
Фанат
Ну на вкус и цвет... :) мне так нравится. При этом в винде глобально антиалиасинг отключен (из-за проблем с другим совтом - QuarkXPress, Adobe Illustrator (у этого вообще свой антиалиасинг и с системным его плющит конкретно), и т.д.)
Nirva
Дык в редакцию я б пошел, но у меня на постоянное сотрудничество не хватит времени. А получилось так, что я как раз стал разбираться с php5 и писать на нем софт (заодно пару багов нашел :)) и вот наткнулся на статью, где нашел кучу багов :)
 

young

Новичок
Profic
Это проблема не журнала
Это проблема деталей.
Статья была опубликована мною, а я за неимением времени не прогна примеры.

Правки будут внесены в статью. Насчет внесения правок в журнал - к NW
 

Profic

just Profic (PHP5 BetaTeam)
young
Я вообще не имею никаких претензий к журналу :) Я меня же в скобочках написано, что я сужу по статьям про php5.
young, nw
Я крайне рекоммендую все статьи касательно php5 перед публикованием проверять на последнем релизе (бете, RC и т.п.), т.к. разработчики меняют много чего (вспомнить тот же clone, или изменение поведения function func (class $obj) на NULL). Это я к тому, что из таких (немного) устаревших статей не получаешь никакой полезной информации. Я столкнулся с этим, как-раз тогда когда начал ковыряться с php5, т.к. большинство статей не отображают действительности.
ЗЫ. Это не в коем случае не наезд, а просьба.
ЗЫЫ. Да, имхо, было бы полезно в таких статьях указывать в самом начале для какой версии она была написана.
 

nw

Новичок
Я крайне рекоммендую все статьи касательно php5 перед публикованием проверять на последнем релизе
было бы полезно в таких статьях указывать в самом начале для какой версии она была написана
Обязательно учтем.
 

voland

Guest
Я бы ещё порекомендовал в журнале делать примечание! Все функции, синтаксис и т.д. были актуальны на момент формирования/редактирования/создания журнала.
Что-то вроде этого.
З.Ы. Хотя может и не надо... Мое дело предложить, Ваше сами знаете :))
 

Игорь

Новичок
2 NW
Уважаемый nw, было бы неплохо, если бы вы перестали употрелять перенос. Без переноса текст намного читабельней. Только не нужно равнять текст по ширине. Рваный правый край, без переносов -- это самое удобное для чтения.

2 Profic
Ну ты крут!!!

2All: есть ли где мануал по PHP5?
 
Сверху