на сообразительность (для начинающих)

maxwell

artifex
zerkms, что значит знать язык программирования в вашем понимании?

Кстати если ко мне приходит человек и заявляет, что он php программист, то лесом идет сразу.
Либо программист, либо нет.

Язык роли вообще не играет.
 

zerkms

TDD infected
Команда форума
maxwell
понятно. я тоже, пожалуй, пойду тогда лесом )))))
 

Alexandre

PHPПенсионер
Язык роли вообще не играет
язык роли не играет, но в каждом языке миллион своих особенностей, и по этому если человека, который несколько лет потратил на изучения РНР - посадить за проект средней сложности на перл или С++ (уже молчу про эрланг), то от него толку мало будет.
так-что лес-лесом, а котлеты к мухам....
 

Духовность™

Продвинутый новичок
2 недели от силы
о. очередной вундеркинд пожаловал, который хочет всем показать какой он умный и какие все вокруг имбецилы, тратящие "несколько лет" (вот лохи) на изучение этого недоязыка.
 

Sherman

Mephi
Язык php настолько прост, что не нуждается в том, чтобы по нему даже книжку писать. Базовые концепции известны по другим языкам. А тонкости(или грабли) это уже отдельный вопрос, который просто входит в практику использования.

То есть нужно прочесть мануал(разделы о языке) и книжку Extending and Embedding PHP, Sara Golemon. Особенно те главы, которые касаются реализации системы типов.

Все. Остальное к php отношения не имеет. Учить API наизусть не нужно.

Основным "тайным" знанием php-программиста является невероятное кол-во хаков, кототрое есть в языке или просто поведения, которое не ожидается.

Пример.

Вот только сегодня снова столкнулся с багом, которому пара лет. В 5.2.х так и не пофиксен баг, который вызывает fatal error, когда вызывается оператор сравнения (==) для двух объектов, которые содержат рекурсивные ссылки. Вроде, в 5.3 пофиксили.
 

DiMA

php.spb.ru
Команда форума
var_dump($GLOBALS===$GLOBALS);

выдает везде FATAL ERROR, так что это скорее не баг, а фича

ну и не нужно в трезвом уме для своих объектов создавать рекурсии
 

Alexandre

PHPПенсионер
и книжку Extending and Embedding PHP, Sara Golemon.
я бы не рекомендовал эту книгу даже среднему РНР-программисту, для среднячка лучше читать эту http://www.books.ru/shop/books/367978
Книга Сары - это для тех, кто собрался писать свои расширения (и то она устарела) или патчить РНР
 

zerkms

TDD infected
Команда форума
DiMA
а как же реализовывать двунаправленные списки или графы?
 

DiMA

php.spb.ru
Команда форума
ты спец по списками и графам? Вот и расскажи о решении проблемы. Не вижу проблем придумать хак для сравнения и рекурсивных объектов, раз у тебя есть крайня нужда.
 

Sherman

Mephi
Автор оригинала: DiMA
var_dump($GLOBALS===$GLOBALS);

выдает везде FATAL ERROR, так что это скорее не баг, а фича

ну и не нужно в трезвом уме для своих объектов создавать рекурсии
Ок, пример из real life.

NetworkGateway {
private parent: // NetworkGateway
private children: // array of NetworkGateway
}

-~{}~ 02.07.09 11:48:

Автор оригинала: Alexandre
я бы не рекомендовал эту книгу даже среднему РНР-программисту, для среднячка лучше читать эту http://www.books.ru/shop/books/367978
Книга Сары - это для тех, кто собрался писать свои расширения (и то она устарела) или патчить РНР
Я _не_ про zend api. Там есть несколько глав, посвященных реализации системы гетерогенных контейнеров, системе типов и т.д. Это сильно не менялось, вроде.
 

Sherman

Mephi
Автор оригинала: zerkms
DiMA
я тоже не вижу проблем придумать хак. при этом я и не утверждаю
Вот я и говорю, что основным знанием php-программиста является изучение этих "фитч" :))

И на закуску, почему нельзя было оператор сравнение для объектов реализовать через обычную сериализацию?

Код:
class a {
		public $var;
	}
	$a = new a();
	$b = new a();
	$a->var = $b;
	$b->var = $a;

	print_r(serialize($a) == serialize($b));
 

zerkms

TDD infected
Команда форума
Sherman
потому что не все объекты без специальной подготовки можно вот так взять и сериализовать.
 

Sherman

Mephi
Какие, например нельзя? Почему нельзя реализовать сериализацию по-умолчанию?

Сейчас нельзя все объекты взять и сравнить :)
 

zerkms

TDD infected
Команда форума
Sherman
$this->property = new PDO(...);

попробуй сериализуй?
 

Sherman

Mephi
А и не должно работать. Если класс не гарантирует инвариант после serialize/deserialize он должен имплементировать свои собственные функции serialize и deserialize.
 

zerkms

TDD infected
Команда форума
Sherman
верно. т.е. для того, чтобы сравнить классы - они должны быть сериализуемыми. т.е. для сравнения пользователю нужно реализовать ещё 1-2 лишних метода.

можно только те, у которых нет методов
ну и бред. ртфм?

PHP:
<?php

class foobar
{
    private $ya_svoystvo = 'ya zna4enie';
    
    private function a_ya_metod()
    {
        return 'o boje moy, tut est metod, atenshn';
    }
}

$baz = new foobar();

var_dump(serialize($baz));
 
Сверху