[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.23225 Reply
File: JESUS-php.jpg
Jpg, 67.58 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
JESUS-php.jpg
Обыскал всю /s/, не нашёл треда.
Собственно хотелось бы освоить пхп и поднимать на нём лёгкие деньги. Какие создать себе условия с литературой, испытательным полигоном для большего удобства? И сколько времени уйдёт на это у неофита со средним IQ вроде меня? Пока даже не знаю с чего начинать, но буду каждый день или два отписываться о прогрессе.
>> No.23227 Reply
>>23225
> пхп
> лёгкие деньги
У мальчиков на побегушках не бывает легких денег - адский труд, пот и мозоли.
>> No.23228 Reply
> Обыскал всю /s/, не нашёл треда
> со средним IQ вроде меня
Но ведь у тебя низкий IQ.

Вот же треды:
>>23209
>>23130
>>23028
>> No.23229 Reply
>>23225
> Собственно хотелось бы освоить пхп и поднимать на нём лёгкие деньги.
Ты меня раздражаешь. По необъяснимым причинам ты думаешь, что программирование - это лёгкая работа, а все, кто занимается программированием - бездельники, получающие деньги ни за что. На самом деле программирование - один из самых сложных видов деятельности с бешеной конкуренцией. Результат, конечно, весьма поощряет, но не потому, что деятельность проста, а потому, что программисты впахивают по хардкору и к тому же имеют огромный врождённый талант. Сообщения в духе "я дурак, но я освою быдлокодинг за два дня и пойду делать лёгкие деньги" выглядят как "то, чем вы, парни, так гордитесь, на самом деле безумно легко". Вот сейчас ты прочитаешь книжку "быдлокодинг для начинающих", а потом попробуешь устроиться на работу, увидишь реальные требования к программисту и будешь плакать на форумах и бордах от того, что от тебя требуют, по-твоему, слишком многого. Лучше устройся дворником, дворник зарабатывает пятнадцать штук в месяц, а работает по два часа в день.
>> No.23237 Reply
File: php53_hosting_diagram[1].png
Png, 27.30 KB, 366×413 - Click the image to expand
edit Find source with google Find source with iqdb
php53_hosting_diagram[1].png
>>23229
Я не говорю что кодинг лёгкий, а то что пхп лёгкий в сравнении с другими языками, но возможностей у него достаточно. И по объявлениям смотрю - нужен кодер пхопе, сделать клон сайта и т.д. Слишком много ненависти к этому языку, потому что крутые кодеры учились в вузах, учили Си(я тоже, но меня он просто из*бал, я не крут), а потом появился такой простой язык как пхп, что даже мимопроходящий дизайнер-верстальщик может в него. Как раз по мне, я уже полтора года ничем таким не занимался, работал за 15к по 2 часа в день, отупляет. Может потом перейду на что-то по-тяжелее, если возможности мне понравятся, но пока я не вижу общей картины в этой сфере, начну с того, что называют лёгким, так?
> "быдлокодинг для начинающих"
Читаю http://www.softtime.ru/bookphp/gl1_1.php и записываю нужное.
Думал найти с озона что-нибудь про пхп, но их слишком много изданий-переизданий, не понятно какая из главная.
>>23228
Конечно, не такой высокий как у тебя. Смешно. Один тред мой, нужно перестать плодить треды и успокоиться.
>> No.23238 Reply
File: x_048c8a49.jpg
Jpg, 46.74 KB, 604×453 - Click the image to expand
edit Find source with google Find source with iqdb
x_048c8a49.jpg
>>23225
> освоить пхп и поднимать на нём лёгкие деньги
> Какие создать себе условия с литературой, испытательным полигоном
   А. Шень, "Программирование: теоремы и задачи."
   Ч. Уэзерелл, "Этюды для программистов."
   А. Ахо, Д. Хопкрофт, Д. Ульман, "Структуры данных и алгоритмы."
   Т. Кормен, Ч. Лейзерсон, Р. Ривест, "Алгоритмы: построение и анализ."
   Д. Кнут, "Искусство программирования."
   Таненбаун все классические труды
   Первый три пункта копипасты про Python очень даже годные для любого из языков программирования, даже для PHP.
   Cоздавай свои проекты, сайты и т.д.
>> No.23239 Reply
>>23237
> Я не говорю что кодинг лёгкий, а то что пхп лёгкий в сравнении с другими языками, но возможностей у него достаточно
> и далее по тексту
Голословно звучит, учитывая, что ты только учишь его, а из других языков, чтобы сравнивать, ты будто знаешь один лишь C.
>> No.23240 Reply
>>23238
> Год издания: 1982
Почти как Линуксу.
Я думаю решать заказы бесплатно и очень долго на сайтах фриланса. Но это потом.
>> No.23241 Reply
>>23240
> 1982
> Почти как Линуксу
Лол, может хватит позориться?
>> No.23242 Reply
>>23239
> Голословно звучит
Так пишут.
>> No.23244 Reply
>>23242
Во-первых, ядро линукса появилось в 1991 году, а нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
Во-вторых, php сложен. Намного сложнее, чем пишут на сайтах "а теперь мы вместе напишем хелловорд".
>> No.23245 Reply
>>23244
> нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
а они вообще есть, по-твоему?
>> No.23246 Reply
>>23245
О чёрт, отстань от меня! Надоели холивары.
>> No.23248 Reply
>>23244
А у меня генту+кде на десктопе, по-моему норм.
>> No.23260 Reply
File: fistNya.gif
Gif, 295.38 KB, 424×240 - Click the image to expand
edit Find source with google Find source with iqdb
fistNya.gif
>> No.23279 Reply
>>23225
Php как язык говно говном, но если обмазываться mvc-фреймворками типа yii или симфони, то жить можно.
>> No.23300 Reply
File: html_logo[1].gif
Gif, 1.53 KB, 270×72 - Click the image to expand
edit Find source with google Find source with iqdb
html_logo[1].gif
Не хочу создавать новый тред, так что напишу тут. Объясните по хардкору, чому табличная верстка хуже блочной.
>> No.23301 Reply
>>23300
Фиксированная позиция элементов, криво выглядит (это про табличную).
нуб
>> No.23302 Reply
File: 2cd0ee626a0882c84bebb0976a134543.jpg
Jpg, 529.00 KB, 1000×1000 - Click the image to expand
edit Find source with google Find source with iqdb
2cd0ee626a0882c84bebb0976a134543.jpg
>>23300
Создатели языка гипертекстовой разметки думали, что таблица - это таблица. То есть, всего лишь "ФИО и номер телефона сотрудников компании", а не целый сайт, но пользователи решили иначе.

Табличный сайт:
1) Хреново индексируется поисковыми машинами, будьте уверены, что пользователей откроет Ваш сайт последним, если откроет.
2) Таблицу сложнее сопровождать нежели блоки.
3) В наше время никто не делает табличные сайты, делайте блоками - это проще и эффективней, к тому же блоки подобны слоям в графическом редакторе, можно ставить значение прозрачности и прочие радости.
>> No.23311 Reply
>>23225
> Пока даже не знаю с чего начинать
http://php.net/docs.php
Ваш К. О.
>> No.23318 Reply
>>23302
А насколько эти значения прозрачности кроссбраузерны?
>> No.23321 Reply
>>23318
Честно говоря, ни в одном из браузеров не видел, чтобы сайты отображались одинаково. Но если ты попробуешь запустить йоба сайтец в IE 6, то думаю тебя ожидает фейл.
>> No.23349 Reply
>>23300
Обе "верстки" хуже: http://www.flownet.com/ron/css-rant.html

Примеры правильной верстки:

- http://antsp2p.sourceforge.net/
- http://nethack.org/
- http://www.mutt.org/
- http://litcave.rudi.ir/
>> No.23350 Reply
>>23302
> Табличный сайт:
> 1) Хреново индексируется поисковыми машинами, будьте уверены, что пользователей откроет Ваш сайт последним, если откроет.
Ебаный сеошник.
> 2) Таблицу сложнее сопровождать нежели блоки.
Осиль шаблоны, PHPблядь.
> 3) В наше время никто не делает табличные сайты, делайте блоками
Миллионы мух жрут говно, жрите говно.
> - это проще и эффективней
Хуита.
> к тому же блоки подобны слоям в графическом редакторе, можно ставить значение прозрачности и прочие радости.
Свистелки-перделки.
>> No.23351 Reply
File: b3a32f82d24c69128115f46686246576fb8d3f44.jpg
Jpg, 128.62 KB, 480×640 - Click the image to expand
edit Find source with google Find source with iqdb
b3a32f82d24c69128115f46686246576fb8d3f44.jpg
>> No.23356 Reply
>>23349
>>23350
Два луддита, не умеющих в красивый дизайн.
>> No.23357 Reply
>>23351
> Тем временем http://www.w3schools.com/html5/tag_header.asp
При чем тут это? header — семантический элемент, он вообще не имеет отношение к верстке.
>> No.23358 Reply
>>23356
Какое отношение красивый/некрасивый дизайн имеет к способу создания раскладки?
>> No.23359 Reply
>>23356
А вот и третий с половиной.
>> No.23364 Reply
>>23357
Он работает как див, и его таким образом рикомендуют применять.
>> No.23367 Reply
File: ca11cb5ad158dd1b7e91688b1aae305b.png
Png, 2532.81 KB, 2305×2808 - Click the image to expand
edit Find source with google Find source with iqdb
ca11cb5ad158dd1b7e91688b1aae305b.png
>>23350
Мой друг, я умею делать только СSS-спрайты, поэтому не понимаю о чём вы говорите. Если Вам не нравится данная информация обращайтесь к моей учительнице информатики.
>> No.24174 Reply
File: tiger.jpg
Jpg, 49.05 KB, 547×363 - Click the image to expand
edit Find source with google Find source with iqdb
tiger.jpg
Суп, котаны.
Появилась у меня в голове такая шальная мысль: сделать транслятор coffeescript'а в php, но результурующий пых-код будет не простой, а со всеми забокшенными POD'ами, ну почти как в руби.
Мотивейшон: компактный код исходников, везде отступы в 2 пробела (а не тот разбод и шатания что приняты в похэпэ).
За основу наверно возьму https://github.com/alxlit/coffeescript-php и http://pecl.php.net/package/SPL_Types

В общем это будет достаточно по хистоте?
>> No.24179 Reply
>>24174
Чего?
>> No.24188 Reply
>>23300
Тем, что используется не по назначению. Таблицы необходимо использовать для таблиц.
>> No.24189 Reply
>>24174
Зачем упираться в coffeescript для этого?
>> No.24190 Reply
>>24189
У него синтаксис няшнее чем у пхп.
>> No.24191 Reply
>>23237
> > Учебник по PHP 4
> PHP 4
> 2012 год
Нашел что читать, лол.
http://manual.php.net
>>23300
Табличные верстка хуже. Об этом сто раз писали. В любой книжке по верстке, по-моему. Потому что несемантично, больше кода и если вставлять таблицы одну в другую будешь - задолбаешься потом все разгребать. Плюс оверхед от табличного рендеринга в браузерах и то как таблицы загружаются, что страница будет съезжать пока все то, что в таблице не загрузится.
Таблицы лучше использовать только для табличных данных.
>> No.24192 Reply
>>24191
> Табличные верстка хуже. Об этом сто раз писали.
Напиши ещё, что для ускорения работы php-скриптов нужно использовать в echo одинарные кавычки, а не двойные.
>> No.24198 Reply
>>24192
Не в тему сравнение.
>> No.24201 Reply
>>24198
В тему. Такая же фраза-индикатор.
>> No.24202 Reply
>>24192
Не, ну конечно это экономия на спичках, однако я всегда названия ключей (и все прочие ситуации, не требующие интерполяции или конкатенации) пишу с одинарными, привычка уже. Да и шифт нажимать не надо :3
>> No.24240 Reply
File: Православная-старушка.JPG
Jpg, 17.08 KB, 420×281 - Click the image to expand
edit Find source with google Find source with iqdb
Православная-старушка.JPG
>>24202
Ну ты понел.
>> No.24631 Reply
File: 350317.jpg
Jpg, 233.12 KB, 850×1280 - Click the image to expand
edit Find source with google Find source with iqdb
350317.jpg
>>23225
Суп, пыхопач.
А можно ли в пыхе сделать модульную систему как в пейтоне или нодеджыэс например?

Т.е. чтоб было приблизительно так:
/* some_module.php */
class Foo {
  function sum($x, $y) {
    return $x + $y;
  }
}

/* some_script.php */
import 'some_module' as 'smth';

$foo = new smth::Foo();
var_dump($foo->sum(13, 666));

/* или */
$smth = import('some_module');
$foo = new $smth->Foo();
>> No.24637 Reply
>>24631
Шалом!
>> No.24647 Reply
>>24631
include
include_once
require
require_once
>> No.24649 Reply
>>24647
Это всё не то, они тупо впендюривают куски кода в место вызова, как в ссаной сишке, мне же нужно нечто завернутое в динамически именованный неймспейс. Ферштейн?
Кстати почему в пыхе синтаксис неймспейсов такой слегка припизднутый? Нельзя было использовать :: вместо бэкслеша?
>> No.24651 Reply
>>24649
Разве в php есть неймспейсы?
>> No.24652 Reply
>> No.24657 Reply
>>24649
Ты наркоман штоле?
//Yoba.php
<?php
  class yoba {
    function foo($x) {
      echo $x;
    }
  }
?>

//fgsfds.php
<?php
  require_once 'Yoba.php';
  $y = new yoba;
  $y->foo(10);
?>
>> No.24661 Reply
>>24657
И чо? Оно взяло и запихнуло класс yoba (кстати, в большинстве конвеншенов названия классов должны быть УпперКамельКейсе) в глобальный неймспейс. Вот зареквайишь ты два файла одноименными классами и будет тебе фатал блять еррор. Ты совсем не понимаешь что такое неймспейс?
>> No.24662 Reply
>>24661
Считаю, что два класса с одинаковым названием — это один класс, а уебков, называющих одинаково разные сущности, рекомендую поить грузинским чаем шестой заварки.
>> No.24664 Reply
File: sleeping-cat-in-shoe.jpg
Jpg, 57.84 KB, 538×656 - Click the image to expand
edit Find source with google Find source with iqdb
sleeping-cat-in-shoe.jpg
>>24631
Вроде разобрался. Всем спасибо за моральную поддержку, лол.
% cat some_script.php 
<?php

function import($module, $as = '') {
  if ($as == '') {
    $as = $module;
  }
  $module = str_replace('\\', '/', $module);
  $as = str_replace('/', '\\', $as);
  eval("namespace $as;?>" . file_get_contents("$module.php"));
}

import('some_module_1');
some_module_1\foo();

import('some_module_1', 'smth_1');
smth_1\foo();

import('some_module_2');
some_module_2\foo();

import('some_module_2', 'smth_2');
smth_2\foo();

% cat some_module_1.php 
<?php

function foo() {
  echo __NAMESPACE__ . " lol\n";
}

% cat some_module_2.php 
<?php

function foo() {
  echo __NAMESPACE__ . " ololo\n";
}

% php some_script.php                    
some_module_1 lol
smth_1 lol
some_module_2 ololo
smth_2 ololo
>> No.24674 Reply
>>24661
Я тебе про нэймспэйсы вообще ничего не отвечал. Ты в >>24631 спросил про импорт? На, блять, получи импорт! Вопросы надо ставить корректно сразу, сука.
>> No.24676 Reply
>>24674
Океюшки.
>> No.27158 Reply
File: pinknblue.jpg
Jpg, 43.15 KB, 583×769 - Click the image to expand
edit Find source with google Find source with iqdb
pinknblue.jpg
>>23225
Еле блядь откопал.

Суп, котанчики.

Мне тут по наследству досталась охапка неструктурированного пхп-говнокода (который является серверной частью одной игрушки для айпадов/айфонов), зачесалось у меня это дело перевести на какой-нибудь mvc-фреймворк. Что порекомендуете: yii, symfony, zend или еще что? Главное чтоб было всё в паттернах, DRY, модно, молодежно и удобно.
>> No.27159 Reply
>>27158
> Главное чтоб было всё в паттернах, DRY, модно, молодежно и удобно.
А нахуя это надо, ты понимаешь?
>> No.27160 Reply
>>27158
Чтобы система была целостной, расширяемой и позволяла юнит-тестировать всё это говно, например.
>> No.27162 Reply
>>27160
А о том, что система при этом должна быстро и точно работать, мало кто вспоминает.
>> No.27163 Reply
>>27158
> зачесалось у меня это дело перевести на какой-нибудь mvc-фреймворк.
Работает - не трогай.
>> No.27165 Reply
>>27163
Люто доброчую.
>> No.27170 Reply
File: gray8.gif
Gif, 247.94 KB, 800×600 - Click the image to expand
edit Find source with google Find source with iqdb
gray8.gif
>>27165
>>27163
>>27162

Скучные вы. А как же стремление к прекрасному?

к: волосат зеленый
>> No.27171 Reply
>>27170
> PHP
> прекрасное
Зачем тебе mvc для серверной части игрушки? У тебя там вьюх так много, не боишься в производительности проиграть нагородив кучу всего ненужного поверх?
>> No.27173 Reply
>>27170
> А как же стремление к прекрасному?
А зачем старое-то ломать? Напиши что-нибудь новое.
>> No.27176 Reply
File: 1240293416081.jpg
Jpg, 22.42 KB, 231×251 - Click the image to expand
edit Find source with google Find source with iqdb
1240293416081.jpg
>>27158
Серверную часть?
На mvc-фреймворк?
Да ты поехавший!
>> No.27188 Reply
>>27176
А что не так то?
>> No.27189 Reply
>>27188
А то, что он хочет впихнуть кучу ненужных кода, абстракций туда, где это все не нужно.
>> No.27190 Reply
>>27170
> к прекрасному
Какое это отношение имеет к программированию?
>> No.27193 Reply
File: котанчики.jpg
Jpg, 238.68 KB, 844×510 - Click the image to expand
edit Find source with google Find source with iqdb
котанчики.jpg
>>27189
Может тогда переписать всё в один файл без функций, классов, в гребаном глобальном скоупе типичной пэхэпэшной лапшой?
>> No.27195 Reply
File: 10.jpg
Jpg, 14.56 KB, 343×365 - Click the image to expand
edit Find source with google Find source with iqdb
10.jpg
>>27193
Ты, если понадобится сложить два числа, используешь целый пека вместо калькулятора, который в тумбочке лежит? И неважно что: неудобно, с собой не взять, времени на старт больше уходит, но ведь модно (ололо, посаны считают на своем крутом ПэКа за доли секунды) и можно писать тесты.

Но если так хочется, то вперед. Потом не забудь отписаться, может мы тут тебя зря отговаривали, добра тебе анон.
>> No.27196 Reply
>>27158
Фреймворки - дело личное, если у тебя нет требований от заказчика. Попробуй все, найди тот, что тебе будет более удобен. Я удобных похапе-фреймворков вообще не встречал, но это просто я питоновыми испорчен.

>>27189>>27176>>27171
Любой крупный проект даже на похапе (впрочем, не "даже", а "особенно") пишется сейчас в рамках MVC-паттерна или его вариаций. Если вы до сих пор пишете быдлокод без отдельных моделей и разделения бизнес-логики и отображения - то вам пора в музей, а не советовать ОПу что-то.
>> No.27197 Reply
File: 12728974033986.jpg
Jpg, 19.49 KB, 332×314 - Click the image to expand
edit Find source with google Find source with iqdb
12728974033986.jpg
>>27196
Ты либо не читал то, что нужно анону или просто еще один прочитавший в интернетах "MVC — это панацея, пихайте его везде". Ему никто не предлагает писать все одним файлом, но использовть mvc-паттерн и монстроподобные фреймворки для для работающей серверной части игры потому что модно, это слишком.
>> No.27198 Reply
>>27197
Для похапе - панацея. Ну, точнее, есть и альтернативы, но в любом случае чистый похапе слишком уёбищен, чтобы им пользоваться.
>> No.27203 Reply
>>27198
Мнение зазомбированного человека, пардон. Пользоваться можно всем, и бейсиком, и PHP. Лишь бы платили.
>> No.27204 Reply
>>27203
Сколько тебе нужно заплатить, чтобы ты нажрался ослиного дерьма на камеру с супом паспорта?
>> No.27205 Reply
File: Jimmy_jacket_forest.png
Png, 61.03 KB, 206×172 - Click the image to expand
edit Find source with google Find source with iqdb
Jimmy_jacket_forest.png
>>27204
Если у тебя программирование с использованием PHP вызывает такие ассоциации, то у тебя что-то не в порядке с психикой, бро.
>> No.27206 Reply
>>27205
У меня с ней как раз все в порядке. Но раз ты говоришь, что тебе пофигу чем заниматься, лишь бы деньги платили, то...
>> No.27207 Reply
File: 132097213596.jpg
Jpg, 577.60 KB, 1023×1012 - Click the image to expand
edit Find source with google Find source with iqdb
132097213596.jpg
>>27206
> Пользоваться можно всем, и бейсиком, и PHP
> ты говоришь, что тебе пофигу чем заниматьс
> всё в порядке с психикой
>> No.27212 Reply
>>27196
> Любой крупный проект даже на похапе (впрочем, не "даже", а "особенно") пишется сейчас в рамках MVC-паттерна или его вариаций
А вот здесь я проиграл.

>>27198
А вот здесь я проиграл во второй раз.

Пусть похапе уёбищен в оригинале, но это не повод накрывать кучку говна красивым чужим монстроидальным фантиком и гордится тем, что, вроде как, всё стало лучше.
>> No.27218 Reply
>>27212
Няш, с тобой никто не играет. И PHP не уёбищен, языки вообще не бывают уёбищными.
>> No.27219 Reply
>>27218
> PHP не уёбищен
me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
>> No.27221 Reply
>>27219
Xort.
>> No.27242 Reply
File: scepticNigra.jpg
Jpg, 61.05 KB, 720×951
Your censorship settings forbid this file.
unrated
>>27218
> языки вообще не бывают уёбищными
>> No.27243 Reply
>>27242
Форман, ты не в теме, ты врач.
>> No.27250 Reply
>>27243
Я не форман. Это во-первых. Во-вторых одни языки могут быть по всем параметрам хуже других. Поэтому и уёбищные могут быть.
>> No.27251 Reply
>>27250
Эти "параметры" живут только у тебя в голове, милоняш. Они не самоочевидны для всех людей вообще. А поскольку они не очевидны, то и однозначно сравнить один язык с другим нельзя.
>> No.27255 Reply
>>27251
PL-1 не уёбищен?
>> No.27257 Reply
>>27255
Нет.
>> No.27269 Reply
>>27158
А еще я хочу перевести с mysql на postgres, но начальник говорит, что без хорошего доклада на тему "почему мускуль сосёт у постгреса" не разрешит такие вольности.
>> No.27270 Reply
>>27269
> Работает - не трогай.
>> No.27383 Reply
>>27269
А правда, что у mysql нет триггеров и хранимых процедур, совсем нет?
>> No.27391 Reply
>> No.27392 Reply
>>27383
Триггеры и процедуры - хрен бы с ними, а вот божественных сиквенсов, увы, нет.
>> No.27395 Reply
>>27392
а как тогда id генерировать?
>> No.27396 Reply
>>27395
AUTO_INCREMENT, не?
>> No.27398 Reply
>>27396
auto_increment не есть sequence
>> No.27452 Reply
>>27395
> а как тогда id генерировать?
А никак.
>> No.28367 Reply
File: mr-bump.jpg
Jpg, 167.14 KB, 843×658 - Click the image to expand
edit Find source with google Find source with iqdb
mr-bump.jpg
Суп, котанчики.
Не совсем по языку вопрос: вот в последнее время во многих дистрах /run монтируется в tmpfs, а /var/run является симлинком на не него; например я настраиваю php-fpm с пулом инстансов для нескольких виртуальных хостов, у каждого там свой чрут, юникс-сокет и всё такое; если я захочу складировать эти сокет файлы не корень /var/run, а например в /var/run/php/, то после перезагрузки эта директория будет удаляться к ебеням, т.е. мне ее придется снова создавать; может быть для этого еще какая не монтируемая в tmpfs директория предназначена? Есть тут знатоки FHS?
>> No.28368 Reply
>>28367
mkdir -p /var/tun/php спасет отца русской демократии
>> No.28369 Reply
>>28368
Плохое решение. Но для быдлокода сойдет.
>> No.28373 Reply
>>28369
А умный вспомнит про runlevel
>> No.28374 Reply
>>28373
Думаешь от ранлевела запускаемого в генте php-fpm будет что-то зависеть?
>> No.29286 Reply
File: metaprogramming.png
Png, 38.08 KB, 607×383 - Click the image to expand
edit Find source with google Find source with iqdb
metaprogramming.png
>>23225
Котаны, а накидайте примеров годного/полезного/угарного метапрограммирования на сабжевом ЯП.
Вот я тут сделал хернюшку, которая какбы кеширует результаты функций и методов, если добавлять 3 строчки кода к каждому из них. http://ideone.com/S9B8Un
>> No.30681 Reply
File: 136519191706961.jpg
Jpg, 21.29 KB, 336×400 - Click the image to expand
edit Find source with google Find source with iqdb
136519191706961.jpg
Суп, товарищи. Задумал я тут сомнительное предприятие: сделать транслятор php в llvm-ассемблер. Не слишком ли ебанутая затея? От сорцов пыха у меня нетбинс умер, да и код у них какой-то пиздецовый, так что наверно буду писать почти с нуля, только слегка попижу бнф.
Мотивейшон: 1) а чисто от нехуй делать, 2) может будет быстрее чем стандартная реализация.
Виш ми лак!
>> No.30683 Reply
>>30681
> может будет быстрее чем стандартная реализация
Как тебе этот проект?
enwiki://HipHop_for_PHP
>> No.30684 Reply
>>30681
гугли phc и подобные проекты.
>> No.30688 Reply
File: 168986756_640.jpg
Jpg, 14.12 KB, 640×360 - Click the image to expand
edit Find source with google Find source with iqdb
168986756_640.jpg
>>30681
> Не слишком ли ебанутая затея?
ПХП дурной язык. Никто не хотел бы к 30 годам стать веб-макакой или 1С-мартыхой. И вылететь из профессии к 40 годам.
>> No.30693 Reply
>>30688
Программист всегда знаком со всеми актуальными языками программирования. Я, веб-программист, умею писать программы на таких языках как ассемблер (для x86; диалекты tasm, nasm и gnu), Fortran, Basic, Pascal (стандарт, экстендед и обжект), C(89), C++(98), C#, Java, Objective-C, Tcl, Smalltalk, Eiffel, D, Scala, Lisp (Common), Haskell, F#, Erlang, Curl, Prolorg и таки да 1C.
А ещё, конечно, знаю сам PHP, JavaScript, Perl, Python, Lua, Ruby и SQL (и оракловский диалект тоже), XSLT и прочие вещи.
Я считаю, что дурных языков не бывает. Все языки одинаковы. Знаешь один - знаешь все. Если называешь себя программистом на каком-то определённом языке, то ты должен знать его в совершенстве. В этом плане PHP не хуже и не лучше других языков. Называешь себя программистом на PHP - необходимо обязан знать наизусть все функции дефолтной библиотеки PHP, все официальные расширения, быть знакомым с основными фреймворками, уметь писать модули расширений PHP и так далее. Разницы, на каком языке специализироваться, нет. Но за PHP платят, десу.
>> No.30694 Reply
>>30692
> Все языки одинаковы.
Глупости. Все языки разные.
И есть много критериев, по которым их можно сравнивать, в частности дизайн самого языка. И тут ПХП в полной жопе — это бессмысленное, бессистемное нагромождение функций из разных языков и библиотек вообще "дизайном" назвать язык не поворачивается.
>> No.30695 Reply
>>30694
Нет, няша. Все языки одинаковые. В конечном итоге, всего лишь набор символов, который заставляет машину действовать. Разницы между прологом и брейнфаком нет.
> И тут ПХП в полной жопе — это бессмысленное, бессистемное нагромождение функций из разных языков и библиотек вообще "дизайном" назвать язык не поворачивается.
Хейтерство, бессмысленное и беспощадное.
>> No.30696 Reply
>>30693
> Все языки одинаковы. Знаешь один - знаешь все.
Не согласен. Одни языки из твоего списка хранят данные вместе с кодом (в объектах, плавающих в куче), другие предпочитают хранить их в виде дерева, отдельно от кода, третьи вообще предлагают создать блок "var" в заголовке программы (как в Алгол-58). Одни закрывают данные от дальнейших изменений, после того, как они созданы, другим это безразлично, третьи допускают даже несколько ссылок на данные, с возможностью изменения их откуда угодно.
> основными фреймворками
Я уже говорил в одном из соседних тредов: так называемые "фреймворки" - повод к тому, чтобы заканчивать с языком программирования и искать новый язык и новую нишу. В большинстве случаев "фреймворки".equalsTo("нагромождения костылей").
> Разницы, на каком языке специализироваться, нет.
Это не так для начинающего, т.к. различаются занимаемые ими ниши. Похапе - не средство для написания алгоритмов. Это, скорее, часть стандартного оборудования фирмы, её снаряжение, т.н. equipment. Наряду с принтером и факсом, столами и канцелярскими приборами на них, системой виденаблюдения и Web-сайтом. Программистишка, - юродивый, деревенский дурачок, - тоже входит в этот набор.
> Но за PHP платят, десу.
Подпишись и ты на рассылку "php or python" на ru.indeed.com - скоро изменишь своё мнение. Во всяком случае, мне помогло.
>> No.30698 Reply
>>30695
Я не знаю, что ты курил, чтобы прийти к такому выводу, но я точно знаю, что это курить тебе больше не следует, потому что твой вывод разбивается сразу о его же следствие: если бы ссе языки были бы одинаковы, то их было бы 1 штука.
>> No.30699 Reply
>>30695
> Все языки одинаковые. В конечном итоге, всего лишь набор символов, который заставляет машину действовать. Разницы между прологом и брейнфаком нет.
Главная разница — стоимость разработки. И она ОЧЕНЬ разная. И этот вопрос предельно принципиален для любого вменяемого человека.
> Хейтерство, бессмысленное и беспощадное.
Нет, не хейтерство, а вполне рациональная оценка той кучи говна, которую они называют стандартной библиотекой.
Во всем должно быть единство стиля и внутренняя логика, системность. В похапе же никакой логики вообще нет. Спиздили из C strpos() когда классов не было, потом спиздили откуда-то еще str_rot13() (уже с подчеркиванием), потом кое-как приделали классы сбоку и поналепили поверх сишных функций еще и методы. Аналогично с ошибками и эксепшнами, аналогично с параметрами. Тут даже не нужно иметь опыта работы с языком, чтобы сразу увидеть, что никакого единого дизайна у него никогда не существовало — это франкенштейн, которого слиши как попало и потом еще дошивали сверху всякими стразиками так, что оно все время расползается.
>> No.30700 Reply
>>30688
У меня такое ощущение, что завсегдатаи досок /s на чанах живут в своём мирке.
>> No.30701 Reply
File: 090112_0009.jpg
Jpg, 29.14 KB, 337×497 - Click the image to expand
edit Find source with google Find source with iqdb
090112_0009.jpg
>>30700
Но уж вы-то, Настоящие Программеры - живёте в настоящем.
Там, где жизнь - борьба. То с пропавшим именем функции, то с потерянным объявлением переменной...
На дворе у вас 2003 год. От перловки все устали, у вас есть новый препроцессор страниц. Теперь даже с MySQL.

Тупость.
>> No.30702 Reply
>>30701
Я к тому, что на улице людям во многом похер как заработать, лишь бы с голоду не подохнуть, фигурально выражаясь.
>> No.30705 Reply
File: Oriflame.png
Png, 6.87 KB, 333×227 - Click the image to expand
edit Find source with google Find source with iqdb
Oriflame.png
>>30702
В том-то и дело, что те немногие, кто мог бы занять нишу быдлокодера, редко испытывают желание писать на Пыхе и ему подобном. Работодатели держатся за свой код, не имеющий ни малейших шансов на продолжение его бренного существования. Работодатели присылают тестовые задания: "выполнить такой-то объём работы бесплатно". Лично я, естественно, не буду присылать во второй раз те же самые скрипты для админки, которые я только что присылал в качестве примера к резюме. Другие делают то же самое, и очень скоро вокруг этих фирм не остаётся никого, кто бы хотел (и был способен) что-то делать. В итоге, какой-нибудь Имхонет или Лекспро (те ещё уроды, кстати) годами не могут найти программиста. На самом деле, программист - он только что был. И не один. Просто, во второй и третий раз в ту же самую фирму он обращаться не будет.

И ещё раз о дизайне языка. Он не казался мне уродцем в 2003 году. То были времена сайтов в три колонки с табличной вёрсткой. Всю работу задастую выполнял один человек. И нам, действительно, платили.

Так было.
Назад дороги нет.
>> No.30711 Reply
>>30699
У меня такое же ощущение сложилось когда после шарпа попробовал джаву. Депрекейтеды на депрекетедах, десяток функций делающих одно и то же, внезапно депрекейтедная нормальная функция и "замена", требующая писать на 10 строк кода больше. Хотя, может я что-то не понял.
>> No.30712 Reply
Суп!
Я тут почитал тред и понял, что у прогера есть два пути:
1. Выучить мейнстримовые языки и писать на них мейнстримовый код, получая за это бабло.
2. Выучить немейнстримовые языки и всем хвастаться своим длинным и толстым IQ, умирая от голода.

Какой вариант посоветуете?
>> No.30713 Reply
>>30712
Язык хранимых процедур DB2. Какой он?..
>> No.30714 Reply
>>30712
3.1 Выучить мейнстримовые языки и писать на них мейнстримовый код, получая за это бабло.
3.1 Выучить немейнстримовые языки и писать на них в свободное время собственные поделки, увеличивая за счет этого ЧСВ.
>> No.30715 Reply
>>30713
Императивный?
>> No.30716 Reply
>>30712
ПЛ/1
>> No.30717 Reply
>>30714
> 3.0
Починил У Вас индекс сломался.
>> No.30725 Reply
>>30717
копипаст, он такой. спасибо
>> No.30770 Reply
File: vvp.PNG
Png, 269.26 KB, 340×497 - Click the image to expand
edit Find source with google Find source with iqdb
vvp.PNG
>> No.31341 Reply
File: scrin.png
Png, 34.95 KB, 977×617 - Click the image to expand
edit Find source with google Find source with iqdb
scrin.png
Подскажи Доброкодер, в чём проблема(ошибка) или так всё и должно быть,если да,то скажи как вывести на cmd.exe фразу "Авторизация прошла успешно" если она действительно прошла успешно, а если нет, то "Неверный пароль"

http://pastebin.com/5Ey9gztw
>> No.31342 Reply
>>31341
Добавь в начало
ini_set('display_errors', true);
error_reporting(E_ALL);
и узри
CIRLOPT_POSTFIELDS
Ороро, наивный
'CHROME'); //чтобы сайт думал, что мы - браузер.
Кстати закрывающий пхп тег необязателен в конце файла, но это к делу не оче относится.
>> No.31426 Reply
File: Strange-Bodies-Exhibit-Hirshorn.gif
Gif, 724.33 KB, 1156×904 - Click the image to expand
edit Find source with google Find source with iqdb
Strange-Bodies-Exhibit-Hirshorn.gif
>>23225
Анон, чому после подключения Symfony этот код выдает два Hello?

<?
require_once 'vendor/autoload.php';

echo "Hello";
?>
>> No.31427 Reply
>>31426
У тебя какой-то неправильный хелловорлд, не МВЦшный.
>> No.31428 Reply
>>31427
Это понятно, но разве это причина?
>> No.31429 Reply
>>31426
cat composer.json
плиз.
>> No.31433 Reply
>>30716
Можно я тебя обниму?
not gay
>> No.31435 Reply
File: chto.png
Png, 17.59 KB, 1306×105 - Click the image to expand
edit Find source with google Find source with iqdb
chto.png
>>23225
Анон, что оно от меня хочет?

<?
require_once "model/Requests.php";
require_once "model/Responses.php";
require_once "model/Database.php";
?>
>> No.31436 Reply
>> No.31437 Reply
>>31435
Очевидно, файла "Requests.php" в папке "model" не существует.
>> No.31438 Reply
>>31436
>>31437
Он там есть, капитаны. Права доступа 777.
>> No.31439 Reply
>>31438
require_once __DIR__ . '/model/Requests/php';
попробуй.
>> No.31440 Reply
File: 11:59.png
Png, 19.06 KB, 1375×83 - Click the image to expand
edit Find source with google Find source with iqdb
11:59.png
>>31439
Не вышло. Может include path нужно изменить?
>> No.31443 Reply
File: 1329897685_60.jpg
Jpg, 32.97 KB, 500×375 - Click the image to expand
edit Find source with google Find source with iqdb
1329897685_60.jpg
>>31440
Нет, не нужно - там уже есть . В той же папке, в которой лежит скрипт, находится папка model, верно? Сам скрипт основной и никуда в свою очередь не включается? Проверь имя. Ещё раз проверь. И ещё раз.

>>31438
> капитаны
Где же твоё уважение?
>> No.31446 Reply
>>31443
Простите, Дон Корлеоне. Папка model была с заглавной буквы.
>> No.31453 Reply
>>31446
Добра тебе.
>> No.31454 Reply
File: 53b095f6189c09e750c15a9ba11ba86cfddd6.jpeg
Jpeg, 17.68 KB, 292×302 - Click the image to expand
edit Find source with google Find source with iqdb
53b095f6189c09e750c15a9ba11ba86cfddd6.jpeg
>>31438
> Права доступа 777
Но зачем?
>> No.31461 Reply
>>31454
От греха подальше.
>> No.31462 Reply
>>31461
От греха подальше это chroot и setfacl с минимальными атрибутами.
>> No.31571 Reply
File: coo.jpg
Jpg, 113.55 KB, 1100×400 - Click the image to expand
edit Find source with google Find source with iqdb
coo.jpg
А вчера эта штука работала.
Что это с ней может быть? Cookie не хочет мне отправляться.
С: общению штатного
>> No.31575 Reply
>>31462
Нет, от греха подальше - это как раз 777, потому что система безопасности в этом вашем Линуксе концептуально поломана.
>> No.31576 Reply
>> No.31577 Reply
>>31571
Ты мог случайно сохранить файл в кодировке UTF-8 с BOM.
>> No.31590 Reply
>>31571
Или у тебя пустая строка или символ перед <?php.
>> No.31593 Reply
>>31575
> от греха подальше - это как раз 777, потому что система безопасности в этом вашем Линуксе концептуально поломана.
Лал, сначала делают полные привилегии на все файлы, а потом кричат что система безопасности поломана.
>> No.31595 Reply
>>31575
> система безопасности в этом вашем Линуксе концептуально поломана
В чём суть поломки?
>> No.31596 Reply
Алсо, на самом деле система безопасности действительно неидеальна, но не в том смысле, что концептуально поломана. Вы часто делаете chmod -rw ~/.local например? Я уже не говорю про то, что программы должны декларировать все файлы, к которым хотят доступ, на этапе установки/обновления
>> No.31632 Reply
Какие, блядь, дозаписи ещё, ёбаный PHP? Какие, блядь, ARRAY? Какие, блядь, хуита нейм?
Ну ты и говно, блядь. В ушах от тебя ломит. Как в школу вернулся, когда на математике цифры считали.
Ебануться.
Ненавижу, презираю.
Как на этом изъёбистом говне нормальные люди программы пишут, блджад?
>> No.31637 Reply
>>31632
Именно так и пишут. c:хочется зеленые поступок гнойный физически.
>> No.31638 Reply
>>31596
> Я уже не говорю про то, что программы должны декларировать все файлы
Надеюсь, не буквально?
>> No.31640 Reply
>>31596
Давай задекларируй все файлы, которые можно открыть вимом например.
>> No.31647 Reply
>>31638
>>31640
любой файл тоже декларация. Так же можно декларировать право на чтение (либо rw) любого элемента ARGV, например. А вот при установке библиотеки, которая хочет универсальные права, хотя поидее вообще не взаимодействует с ОС универсальная декларация будет смотреться не очень круто
>> No.32078 Reply
File: lalka.jpg
Jpg, 12.31 KB, 493×122
edit Find source with google Find source with iqdb
lalka.jpg
File: cat_laptop.jpg
Jpg, 44.94 KB, 523×700
edit Find source with google Find source with iqdb
cat_laptop.jpg

Суп, котанчики!

Есть один говнокод, в нем используется какая-то ОРМ, абстрактный класс сущностей и определенный класс сущностей. Всё вроде зачипись работает, но идещка пхп-шторм не желает определять переменную $yo как экземпляр такого-то класса. Как эту херню побороть?

Говнокод вот такого вида: http://ideone.com/lVD17O
>> No.32083 Reply
>>32078
Функция find в докблоке (@return object) как-бы возвращает object, собственно шторм и подсказывает по object, а не по Yoba.
>> No.32085 Reply
>>32083
Ненене, файнд подсказывает то что надо, а блядский олл нихуя, что бы я не вписывал в 31ю строку. Походу это баг в шторме. Ебаная проприетарщина. Из-за этого просрал полдня впустую. -_-
>> No.32410 Reply
Пыханы, как мне в РНР можно сделать, чтобы в регулярном выражении искалось что-то, что мне нужно, а в переменную сразу же записывалось что-нибудь другое?
Пока приходится делать так:
   preg_match('/e">.*/', $blabla, $yoba);
   $name = substr_replace($yoba, "", 0, 3);
А я хочу в одну строчку.
>> No.32411 Reply
>>32410
Ололо, preg_replace с eval'ом, хотя не знаю, взлетит ли в похапэ.
мимоизвращенец
>> No.32431 Reply
>>32410
Написала тебе решение в одну строчку:
pregmatch('/e">.*/', $blabla, $yoba); $name = substrreplace($yoba, "", 0, 3);
>> No.32473 Reply
>>32085
Баг в шторме - очень вряд ли, тем более в таких банальных вещах. Какой еще файнд? IDE не запускает код, а только его инспектирует. $allthatyobas == object[], $yo - object, подсказывание идет по object. попробуй @var?
>> No.32477 Reply
File: Cat_on_a_Laptop.jpg.scaled500.jpg
Jpg, 74.05 KB, 500×334 - Click the image to expand
edit Find source with google Find source with iqdb
Cat_on_a_Laptop.jpg.scaled500.jpg
>>32473
У метода find по аннотации в 39 строке шторм догадывается, что возвращается экземпляр дочернего класса (позднее статическое связывание или как его там), т.е. $y есть SomeYobaEntity. Для метода all, который возвращает массив экземпляров дочернего класса, он такую догадку делать отказывается. Я конечно аннотацией @var или @type для таких объектов как $yo могу указать класс, но это то.
>> No.32494 Reply
>>32431
Отличная шутка.
>> No.32500 Reply
>>32494
Какой вопрос, такой ответ.
>> No.32505 Reply
Анон, а что нужно минимально знать, чтобы устроиться студентом php-кодером на тыщ 15 хотябы. Знаю с++, умею писать код и ООП на энтри-левел. Если выучу пхп, sql, одну какую-нибудь CMS и один какой-нибудь MVC-фреймворм и доучу паттерны в книге четырёх, этого хватит для начала?
>> No.32506 Reply
>>32505
Анон, а что нужно минимально знать, чтобы угробить свою карьеру. Знаю фьолетовое окаменевшее говно шерстистого носорога, умею писать циклы и операторы "if..else-if..else-if..else" и нагромождения костылей на энтри-левел. Если выучу пхп, sql, одну какую-нибудь CMS и один какой-нибудь MVC-фреймворм и доучу паттерны в книге четырёх, проще ли будет вылезти из-под железнодорожной платформы и положить голову под поезд, этого хватит для начала?
>> No.32507 Reply
>>32505
> Если выучу пхп
От пхп нужно знать только синтаксис. С sql нужно понимать синтаксис и гуглить нужные запросы. За джуниора сойдешь, наверняка кому-нибудь нужны обезьянки на обучение.
>> No.32508 Reply
>>32507
> От пхп нужно знать только синтаксис.
Неправда. Нужно ещё знать стандартную библиотеку.
>> No.32515 Reply
>>32508
В которой всё неочевидно и припизднуто и ты каждый раз будешь гуглить вопросы типа "как в пхп найти длину строки".
Но в последнее время в пых тянут всякую всячину из приличных ЯП например генераты - я чуть не кончил радугой, isset и empty для выражений - слеза радости скатилась по небритой щеке, пакетный менеджер composer вместо ебаного pear, вот бы еще взамену pecl что-нибудь изобрели, лет через несколько он даже станет не таким полным говном, что не может не радовать.
>> No.32516 Reply
>>32515
> и ты каждый раз будешь гуглить
Нужно знать, а не гуглить.
>> No.32519 Reply
>>32516
Все эти функции с названиями типа strdosmthng($arg0, $arg1, $flags, [&$result]) абсолютно невозможно запомнить.
>> No.32525 Reply
>>32519
У тебя очень слабая память, анон.
>> No.32532 Reply
>>32515
> лет через несколько он даже станет не таким полным говном, что не может не радовать
И что изменится? На цены посмотри!
>> No.32533 Reply
>>32532
А что с ценами? Опять гречка дорожает, поди? Так я кофем питаюсь, мне не страшно.
>> No.32537 Reply
>>32533
Насколько можно видеть из форумов SQL.ru и RSDN более опытные товарищи называют работодателю среднюю заработную плату (её показывает в том числе и Яндекс) и не соглашаются на меньшее. Таких не берут, конечно.
>> No.32585 Reply
File: 001.jpg
Jpg, 82.06 KB, 600×450 - Click the image to expand
edit Find source with google Find source with iqdb
001.jpg
怎麼可以這樣理解嗎?
>> No.32586 Reply
File: 001.jpg
Jpg, 82.06 KB, 600×450 - Click the image to expand
edit Find source with google Find source with iqdb
001.jpg
怎麼可以這樣理解嗎?
>> No.32588 Reply
>>32585
Да, пиздоглазые вконец охуели.
>> No.34116 Reply
File: d-g-hugo-2.png
Png, 783.87 KB, 1173×635 - Click the image to expand
edit Find source with google Find source with iqdb
d-g-hugo-2.png
>>23225
Привет иисусач. Такой вопрос, что будет, если джва посетителся сайта выполнят запрос одновременно?
>> No.34118 Reply
>>34116
Гугли транзакции и их защиту.
>> No.34119 Reply
>> No.34135 Reply
>>34116
Это вопрос не к иисусачу, а к вебсервачу, т.к. он отвечает за распределение и распараллеливание запросов.
>> No.34186 Reply
File: apple-touch-icon-114.png
Png, 2.44 KB, 114×114 - Click the image to expand
edit Find source with google Find source with iqdb
apple-touch-icon-114.png
Привет анон. Пишу аналог сайта чатвдвоем для себя. Суть в том, что после того как оба пользователя нажмут "Готов к чату" их коннектит друг с другом и начинается собственно чат. Вопрос в том, как правильнее всего его реализовать? Создавать новую таблицу для каждого нового чата?
>> No.34187 Reply
>>34186
Да сразу на текстовых файлах делай, чо там.
Все с єтого начинали, ага.
>> No.34188 Reply
File: apple-touch-icon-114.png
Png, 2.44 KB, 114×114 - Click the image to expand
edit Find source with google Find source with iqdb
apple-touch-icon-114.png
>>34187
Хватит стебать, так как? В тех исходниках которые я видел есть только один общий чат и никакие комнаты не создаются. Там используется одна таблица для чата, а как поступить в этом случае?
>> No.34189 Reply
>>34188
Одна табличка, в ней индекс по столбику chat_id, ещё индексы по времени добавления (чтобы чистить её) и пользователям, и всё.
>> No.34191 Reply
File: zsmall.jpg
Jpg, 10.70 KB, 223×229 - Click the image to expand
edit Find source with google Find source with iqdb
zsmall.jpg
>>34189
Аа, спасибо анон, жаль сам не допер.
>> No.34345 Reply
File: 4176945523_8d7843e148.jpg
Jpg, 86.52 KB, 280×500 - Click the image to expand
edit Find source with google Find source with iqdb
4176945523_8d7843e148.jpg
Суп-мисо, котаны. Посоветуйте годный ORM. Желательно чтобы имел следующие качества: был отдельным от фреймворков; имел удобный механизм кеширования в memcaced и redis; не нужно писать сеттеры/геттеры как в доктрине; умел в мускуль и постгрес; без тормозных аннотаций.

Пока вот присматриваюсь к doctrine2, yii active record, propel.
>> No.34350 Reply
>>34345
Я, конечно, не знаю, что для тебя "годный", потому что для быдлопехапешников, например, очень годна доктрина, но правда в том, что для РНР НЕТ годного ОРМ. Серьёзно, вообще. Говно и ещё говнее. У нас в проекте написан свой, дома я на пехопе не пишу, но если буду писать (нахуя, лол?), то, опять же, набросаю что-нибудь сам, ввиду столь омерзительных вкусов членов пехопе комьюнити.

Из виденного мной более-менее сносен Propel.
>> No.34351 Reply
>>34350
Алсо, да, зачем я вообще отвечать стал: ух ты, впервые вижу няшную косплейщицу.
>> No.34353 Reply
>>34350
Да, похэпэ такое-то днище, но в моем Мухосранске особо не повыебываешься на тему выбора ЯП. Мне скоро пришлют тестовое задание, хочу сразу писать с использованием не самого уебищного ORM.
А кстати лучше Propel 1.6 или 2.0?
>> No.34749 Reply
File: awesomely-cute-kitten-1500.jpg
Jpg, 127.91 KB, 1024×768 - Click the image to expand
edit Find source with google Find source with iqdb
awesomely-cute-kitten-1500.jpg
Котаны, я тут открыл для себя волшебную силу аннотаций! Теперь мои больные фантазии можно элегантно воплощать в коде. В инете пишут, что парсер аннотаций doctrine медленный ибо пхп, поэтому решил запользовать из phalcon. Но тут возникает маленький нюанс: доктрина ставится через композер, а фалькон через ссаный пекл.
Пойду дальше писать свой супер-пупер-мега-крутой ORM для redis.
>> No.34992 Reply
File: Perfect-Blue.jpg
Jpg, 81.70 KB, 1024×550 - Click the image to expand
edit Find source with google Find source with iqdb
Perfect-Blue.jpg
Вечер, котанчики.
Я тут смотрю на популярные mvc-фреймворки для пхп и не понимаю почему люди используют yii. Эти пиздоглазые уёбки кладут хуй на psr-0, 1 и 2. Как можно этим говном пользоваться?
>> No.34999 Reply
>>34749
> Котаны, я тут открыл для себя волшебную силу аннотаций!
Чурт тебя, чур! Сгинь, нечистый!
>>34992
> psr-0, 1 и 2
Появились гораздо позже, чем yii и на них всем похуй, лолка. То есть, ну реально почти всем, кроме всяких упоротых ньюфагов. Я вообще работаю в компании с каким-то уёбищным кодинг-стандартом с табами вместо пробелов и переносом скобок на другую строку (даже в JS, о Аллах!). Все (даже молодые и сорт оф современные) удивляются и не понимают, почему я называю их стандарт говном. Конечно, мне бы больше понравилось писать по-нормальному (даже хуй на них на скобки — хоть бы пробелы вместо табов, чтоб с настройками в виме не путаться). И знаешь что? Мне похуй. Если б я внезапно посчитал бы что-то подобное критически важным, то я в первую очередь перестал бы писать на пехопе, а потом бы уже беспокоился о стиле кодирования и стандартах, которые даже толком не признаны в коммьюнити. Вот только всё это погоды не делает. Мир вообще дохуя неидеален.

Хотя yii я тоже не пользуюсь, конечно.
>> No.35000 Reply
>>34999
> с табами вместо пробелов и переносом скобок на другую строку
Компания моей мечты полгода назад. А потом я пописал под ведро, ну и решил соблюдать ихние стандарты, раз уж такое дело, и всё заверте...
>> No.35001 Reply
>>34999
Там самое критичное это psr-0, т.е. файлы классов расположены хуй пойми как, без неймспейсов (и даже без псевдонеймспейсов) и некоторые из них блядь одноименные.
Несоответствие psr-1 и 2 выражено у них в табах, отступах по Олману, отсутствии пробелов вокруг операторов, что уродливо, но похуй.
Ладно, можно просто обходить этот фреймворк стороной.
>> No.35002 Reply
>>35001
> отступах по Олману
Гомофоб что ли?
>> No.35077 Reply
File: 138314044985831.jpg
Jpg, 16.52 KB, 1280×1024 - Click the image to expand
edit Find source with google Find source with iqdb
138314044985831.jpg
Аноны, здравствуйте. К вам перекачусь. Посоветуйте пожалуйста движок магазина.
Основные требования:
1) Бесплатность
2) Легкость в освоении
3) Гибкость настройки (необходима возможность создания категорий товара и задания параметров категорий. Например категория "Холодильники", параметры - высота, ширина, глубина, вес; категория "Презервативы", параметры - размер, цвет)
4) Доступность тем в интернете (чтобы можно было всё красиво сделать)
5) Не сильно кривой код (Пожалуйста не предлагайте друпала и вордпреса - я с них блюю).
Спасибо.
Или может быстрее свою шняжку на YII запердолить и не перить мозги?
с: доставлять смертных
>> No.35312 Reply
Читаю статью об установке связки Apache+PHP+MySql+PHPMyAdmin+Symphony на Ubuntu. Собираюсь ставить то же только вместо Symphony - Zend Framework 2. Взлетит это у меня? Планирую затем запускать для теста мой сайт на локал-хосте. Потом планирую перенести тоже самое на домашний сервер(тоже убунту).
http://folkprog.net/ustanovka-i-nastroyka-apache-php-mysql-v-ubuntu/
Тут сказано сделать
apc.shm_size = 128M
Какой-то размер каких-то сегментов какой-то разделённой памяти. Что это такое и почему автор так решил?

Вообще ставит в тупик установка этих комбинаций из ПО. Есть документация, как ставить каждую из них, но как их вообще связывать неясно толком. И почему они все так любят писать инструкции без объяснения, что и зачем?
>> No.35313 Reply
>>35312
> The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and robust framework for caching and optimizing PHP intermediate code.
>> No.35314 Reply
>>35312
Кстати Symfony через f пишется.
>> No.35315 Reply
>>35313
Я спрашиваю, зачем менять размер этого самого сегмента кеша? И чем здесь при этом руководствуются?

Чёрт, вторая проблема. Тут дана команда a2enmod rewrite. После её запуска написало, что надо сделать service apache2 restart. Но когда я его делаю, то мне пишет
  • Restarting web server apache2 [fail]
Хотя если зайти на локалхост в браузере, то пишет "It works!"
>> No.35316 Reply
>>35315
Ну вот и команда sudo apache2ctl -M говорит, что rewrite в наличии. И ит воркс, но не хочет рестартиться. Что за прикол такой?
>> No.35320 Reply
>>35315
> Restarting web server apache2 [fail]
cat /var/log/апач-что-то-там.log
>> No.35321 Reply
>> No.35327 Reply
>>35321
ОК, я решил проблему. Я дурак. Надо было запустить apache2ctl, чтобы он дал сообщение об ошибке. А ошибка была в том, что надо было определить дменное имя, так как через IP 127.0.0.1 он его не определял.
>> No.35347 Reply
>>35327
Нет, я идиот. ошибка которую я исправил была лишь пустым предупреждением. На деле я просто должен был рестартить с sudo. Ну блин, я думал, он мне напишет в таком случае прямо, что прав нет, как он обычно делает.
>> No.35348 Reply
>>35347
Хм, а я обычно рестартую через /etc/init.d/apache2 restart, наверно олдфаг.
>> No.35353 Reply
Не пользовался раньше фреймворками для веба. Пытаюсь изучить Zend Framework 2 по Getting started на официальном сайте. Скачивание самого зента и скелетон-апликейшн и их запуск прошли успешно. Создание файлов и вставка кода завершились тем, что первая страничка из 4-х, которая должна получиться не получилась. Вместо неё ошибка:
http://pastebin.com/0tbkUkAc
Уж очень много непонятного кода приходится вставлять, который при том не всегда ясно, почему не был вставлен заранее автоматически. И непонятно как проверять, что всё правильно после каждого очередного редактирования. Правильно ли я понимаю, что после каждой инструкции запуск не должен вызывать никаких ошибок? Или же всё сможет запуститься, когда я навставляю весь код?

Я точно что-то делаю не так. Алсо, мои инструменты включали пока только gedit, nautilus и браузер. Какие используются приличные редакторы/IDE с автокомплитом, которые можно было использовать с приличным дебагером? Думал разобраться с зендом, а потом разобраться с редакторами и дебагерами, но подозреваю, что я выбрал не тот порядок.
>> No.35355 Reply
http://habrahabr.ru/post/77902/
Почти 70% пхп-кодеров с хабра не пользуются дебаггером. У меня культурный шок.
>> No.35356 Reply
>>35355
А нахрена?
>> No.35357 Reply
>>35356
Получать понятные подробные сообщения об ошибках, полезные предупреждения, трассировать, ставить брейкпойнты, просматривать содержимое переменных, включая все поля и массивы, не вводя новые команды для вывода. Так было у меня при программировании на С++ на VisualStudio и QtCreator+gdb+gcc. В вебе ничего этого нет? Мне что, самому что ли программировать?
>> No.35358 Reply
>>35357
В вебе нахер не сдалось это. Фаст дебаг при помощи echo() а там похер. Дешево и сердито.
>> No.35359 Reply
File: 221.jpg
Jpg, 1113.72 KB, 1400×1000 - Click the image to expand
edit Find source with google Find source with iqdb
221.jpg
>>35355
Пф. Культурный шок у него. Ламер.

Я лично не пользуюсь дебагером. На пехопе я стал писать вместе со сменой работы, до того момента не будучи с ним особенно знаком. На предыдущей работе писал на жабе и был несколько удивлён, что всем в моём новом окружении похуй на дебагер, тем более что я знал, что для пехопе он есть (у нас там инфраструктура, высокие технологии, так что нельзя так просто взять и поставить самому XDebug на девелопмент-сервер). У меня ещё бывали порывы таки его там организовать (типа, ну, высокие технологии, новый миллениум, хуле мы как пещерные люди), но в итоге оказалось, что в случае со сложным и плохо написанным легаси-кодом у XDebug-а бывают моменты взаимного недопонимания, а вообще дебагер и правда не нужен. Пиши var_dump($ololo); и делов-то. Потом я ещё прозрел и понял, что ИДЕ тоже нинужны.

Впоследствии было добавлено несколько улучшений. Во-первых, читать огромные трейсы в js-консольке неудобно (в случае со всяким там Аяксом), поэтому когда запрос к джейсон-сервису не удаётся раскодировать, лепится сплэшскрин с ним поперёк всего экрана. Удобней листать и копировать. Во-вторых, выяснилось, что неудобно дебажить всякие-там http-API сервисы, которыми пользуются другие проекты. Особенно, если писал ты их давно, а теперь внезапно у кого-то что-то не так. Поэтому в качестве грубого и эффективного решения персонально для себя я создал MyDebug::log($ololo), (часто используемый как MyDebug::log(var_export($ololo, TRUE))) который вместо того, что срать на экран, срёт в базу. Вот, собственно, и всё. Даже не знаю, что ещё нужно. В смысле, бывали случаи, когда всё было как-то печально, но это была магия совершенно иного уровня, и дебагер бы всё равно не помог.

Вот куда больше мне хотелось бы как-то оптимизировать процесс дебага жабоскрепта. Может быть я не умею готовить фаербаг, я не знаю, но толку с его трейса и т.п. фич "настоящего дебагера" я ни разу не поимел. Особенно неприятны две ситуации. Первая: какая-нибудь дурацкая ошибка вроде опечатки в имени переменной эвалуируется в какое-нибудь "e is not a function" (ну или что-то подобное) где-нибудь в недрах какого-нибудь underscore.js. Вторая: фиксил что-то сразу в 10-ти файлах, где-то что-то прозевал (задумался, например, на var foo =, — а потом забыв об этом пошёл фиксить другой файл), а после склейки JS получил невменяемую ошибку о неправильном синтаксисе где-нибудь в другом конце проекта. Понимаю, что именно произошло всегда только читая локал дифф или файлы, который только что менял. Это представялется как-то не слишком эффективным.

Такие дела.
>> No.35363 Reply
>>35359
> дебаг жабоскрепта
Линт и юнит-тесты. Пользуй их.
>> No.35385 Reply
>>35359
> Это представялется как-то не слишком эффективным.
Это представляется как основная причина, почему люди уходят с динамических языков.
Больше просто не могут.
>> No.35386 Reply
В чём разница между CGI, fastCGI и запуском PHP-интерпретатора в апаче без них? Почему столько способов запуска? IDE PhpStorm выдаёшь ошибку при запуске, так как мол не включен CGI/fastCGI. Как его включить? Правильно ли я понимаю, что в Server API в phpinfo() он должен тогда высветится?
>> No.35388 Reply
>>35386
На http://stackoverflow.com, быжло!
CGI - запуск скрипта при каждом запросе. FCGI - запуск скрипта единожды и передача ему всех запросов через сокет/standard IO. В Апаче, как я понял, еще есть модуль-DLL-ка-интерпретатор PHP.
>> No.35389 Reply
>>35388
Меня в первую очередь интересует, как же его всё таки включить.
>> No.35390 Reply
>>35389
В смысле включить FastCGI/FPM.
>> No.35391 Reply
>>35389
apt-get install php5-fpm
/etc/init.d/php-fpm start
например.
>> No.35392 Reply
>>35391
> apt-get install php5-fpm
Уже
> /etc/init.d/php-fpm start
-bash: /etc/init.d/php-fpm: Нет такого файла. Есть php5-fpm. Стартнул его. В локалхосте запускаю phpinfo(). В Server API продолжает светится Apache 2.0 Handler. Рестартнул апач - то же самое.
>> No.35393 Reply
>>35392
Стоп, так PHP-FPM - это альтернатива апач и одновременно с ним не запускается? Или один из режимов работы самого апача?
>> No.35394 Reply
Ну всё, у меня паника. Ни zend framwork, ни symfony, ни fpm, ни phpstorm, ни xdebug как таковые я не могу запустить и использовать вообще никак. Мои охуительные знания решения дифур, алгоритмов и ООП мне нисколечко не помогают. Ну нахуя я трахал себе мозги этим сраным универом, когда от него толку ноль без палочки? Не понимаю вообще, чё от меня хотят во всех этих мануалах и документациях, ничё вообще не работает. Приходит на ум, что тогда нужна какая-то глубокая книга. Только какая. Какие книги есть по этим злободневным темам?
>> No.35395 Reply
>>35394
Не истери.
Что ты пытаешься сделать и что получается, а что нет?
> и использовать вообще никак
Ось хоть какая? Если винда, то ставь сборку http://open-server.ru http://endels.ru
Если линупс, то спрашивай, если чо не получается. Но уж лучше более конкретно.
Асло в /u/ есть кафедра сайтостроя >>u/104773 а в ней тонны ссылкоты
> Ну нахуя я трахал себе мозги этим сраным универом, когда от него толку ноль без палочки?
Действительно. Универ нинужен. Недавно вот с одноклассницей, что сейчас учится на третьем курсе бюджета топового технарского ДС-вуза, общался. В общем нинужен универ. Теперь я в этом убедился.
>> No.35398 Reply
File: 22f7ef0a72895f7c4271dfd048cea457[1].jpg
Jpg, 3022.84 KB, 2000×2963 - Click the image to expand
edit Find source with google Find source with iqdb
22f7ef0a72895f7c4271dfd048cea457[1].jpg
>>23225
Доброчан, выручай. Сейчас я занимаюсь версткой одного сайта и вроде все должно близиться к концу, но Flash не дает мне сделать это. Дело в том, что я прописал вертикальное, правостороннее меню с подкатегориями, все должно быть хорошо, но Flash прикрывает своей интегрированной тушей эти всплывающие подкатегории. Скажи, что мне сделать?
>> No.35399 Reply
>>35395
Линупс. Ситуация с попытками запуска fastcgi с fpm не изменилась. Я взялся за это потому, что при открытии файлов в phpstorm вылазила ошибка "Включите CGI". Сейчас в phpinfo по-прежнему стоит Apache 2.0 Handler, но ошибка, просящая CGI в phpstorm пропала куда-то.

Как должны выставляться владельцы и права в папке /var/www и её подпапках? При открытии свойств папок в sudo nautilus после изменений пользователя на не-рут наутилус умудряется падать с ошибкой "не могу определить владельца".
>> No.35400 Reply
>>35395
> Асло в /u/ есть кафедра сайтостроя >>u/104773 а в ней тонны ссылкоты
В основном только о языках и кодинге. Да, это любой идиот судя по всему может легко нарыть и понять. А вот о запуске и настройке апача, ИНТЕРПРЕТАТОРА пхп, об IDE.
>> No.35401 Reply
>>35400
И о фреймворках ещё.
C:решимость коллайдер десы унылый полный
>> No.35402 Reply
>>35399
> Как должны выставляться владельцы и права в папке /var/www и её подпапках?
На домашней машине как угодно. А вообще мог бы подредактировать конфиги апача и переместить локалхост в район ~/www
> наутилус умудряется
Пользуйся консолькой во имя добра.
Ставь на рабочий стол google://linux+cheat+sheet+wallpaper

>>35400
> о запуске и настройке апача, ИНТЕРПРЕТАТОРА пхп
google://how+to+install+lamp+ubuntu
https://help.ubuntu.com/community/ApacheMySQLPHP
Или хинт: ставить xampp
> об IDE
Об IDE нужно читать доки этой самой IDE. А так многие предпочитают пользоваться обычными текстовыми редакторами.

>>35401
> И о фреймворках ещё.
О фреймворках лучше читать в документациии этих фреймворков. Для всех популярных есть туториалы на русском. Можешь читнуть код ещё. Для общего развития.
>> No.35423 Reply
Я знаю, что это дурацкий вопрос тем не менее. Тут описывается система безопасности Symfony2:
http://symfony.com/doc/current/book/security.html
Вопрос - в каких случаях эта штука используется и для чего? Для любой авторизации пользователя, которая только бывает на сайте или не для всей? Если я просто буду принимать по POST логины и пароли и запоминать авторизацию в сессии, то будет небезопасно? Если создаётся форум на симфони(предположим), то вся база аккаунтов будет тоже идти через эту систему секьюрити?
>> No.35430 Reply
Как на убунту13.10/апач2.4 перенести /var/www в хомяк? Простое изменение DocumentRoot в sites_available/000-default.conf приводит к тому, что при обращении на страницу выдаётся "Forbidden". Вся папка вместе со всем содержимым установлена в 777 и принадлежит самому пользователю.
>> No.35432 Reply
>>35430
Говорят, надо ещё добавить в этот же конфиг строку с AssignUserId. Эта штука должна заработать благодаря apache2-mpm-itk, которую я уже установил через apt-get. Но вот при перезагрузки апача, он пишет, что не знает никакой AssignUserId. Может, этот apache2-mpm-itk надо как-то подключить к апачу?
>> No.35433 Reply
>>35432
На силу подключил через a2enmod mpmitk. Апач перед этим потребовал отключить mpmprefork через a2dismod. Прописал AssignUserId на "пользователь пользователь"(имя пользователя). Рестартнул апач. Всё равно форбиден.
>> No.35436 Reply
>>35433
Прописал везде DirectoryIndex. Проекты без фреймворка заработали. Проект на symfony так и остался форбиден. Попытался очистить его кеш ресурсов с помощью встроенной в него app/console. Так он пытается зайти в папку кеша в старом каталоге на /var/www/. А в доках написано, что все пути относительные и можно переносить по каталогам, сколько влезет! Фрактальный ад какой-то.
>> No.35927 Reply
>>23225
В php вообще есть нормальный ассоциативный массив типа map в С++? Обычный массив только строки и числа для ключей использует, а SplObjectStorage просто убила меня тем, что он содержит только ссылки на объекты и считает равными только ключи, ссылающиеся на один объект, но не ключи, ссылающиеся на два одинаковых.
>> No.35932 Reply
>>35927
1. В php нет обычных массивов. И это проблема похуже, чем твои проблемы с ограниченностью массивов ассоциативных. Про SplFixedArray не надо говорить - почему я должен им пользоваться? Почему в самом языке нет нормальных массивов?
2. php тебе не нужен. Возьми Ruby, там в качестве ключа может быть что угодно, что обладает методом hash. Из коробки нормально можно использовать в качестве ключа даже массив произвольных объектов.
>> No.35933 Reply
>>35927
wait... Или тебе обязательно нужна упорядоченность по ключам?
>> No.36036 Reply
File: disappointed-cat-is-disappointed-lolcats-yeyF7P.jpg
Jpg, 34.34 KB, 510×327 - Click the image to expand
edit Find source with google Find source with iqdb
disappointed-cat-is-disappointed-lolcats-yeyF7P.jpg
Суп, котаны.
Сколько в Москве не стремно просить junior/middle похэпэ-погроммисту? А то я 100тыр поставил в hh, меня только на сеньора/тим-лида собеседуют.
Может вернуться в родной Мухосранск?
>> No.36037 Reply
>> No.36039 Reply
>>36037
Как-то уныленько.
>> No.37093 Reply
Как правильно выглядит workflow разработки сайтов на популярных похапешных CMS? Правильно ли я понимаю, что про git можно забыть? Из-за того что надо работать отчасти в админке и половина разрабатываемого сайта в БД. Выходит, так круто расписанную историю изменений с возможностью вернуться к любой точке не сделаешь?

На CMS обычно работают локально или прямо на ftp хостинга. Работодатели говорят работать на ftp, но так у меня IDE и редакторы тупят и я вообще не знаю, как дебаггер запускать. Можно дебаггер запустить на хостинге?
>> No.37144 Reply
>>37093
Если у тебя бд однозначно описывается моделями или имеется механизм миграции, то гит не помешает.
>> No.37145 Reply
>>37093
> круто расписанную историю изменений с возможностью вернуться к любой точке не сделаешь?
Если не реализовано в самой CMS, то в твоем случае, полагаю, никак.
Git имеет смысл использовать, если, например, ты меняешь какие-либо файлы. Будь это скрипты самой CMS, или если шаблоны CMS хранятся в файлах...
> На CMS обычно работают локально или прямо на ftp хостинга.
У CMS обычно есть веб-интерфейс, на то она и CMS.
> я вообще не знаю, как дебаггер запускать.
И зачем тебе дебаггер? У популярных CMS должен быть вывод ошибок в лог.
>> No.37149 Reply
>>37145
> Git имеет смысл использовать, если, например, ты меняешь какие-либо файлы. Будь это скрипты самой CMS, или если шаблоны CMS хранятся в файлах...
Я одновременно и это делаю и в админке что-то. Потому, что что-то делается только в файлах, а что-то только в админке.
> У CMS обычно есть веб-интерфейс, на то она и CMS.
Ну и как я буду шаблоны переопределять в веб-интерфейсе? Учитывая, что это большая часть работы.
> И зачем тебе дебаггер?
Чтобы дебажить шаблоны эффективнее. Просматривать, что происходит.

CMS создают у меня ощущение, что с ними только в quirks-режиме работать можно. Ни гита, ни дебаггера. Кстати, недавно познакомился с LocomotiveCMS на руби. Там разделены разработка и работа с сайтом через админку. Сначала ты генерируешь, конфигурируешь и кодишь шаблоны через консолько и текстовый редактор без БД, а потом уже консольной командой натягиваешь админку, подключающуюся к БД. Но рынок, конечно, чихал на рубистские CMS для хипстеров. Так что хуй тебе.
>> No.37153 Reply
>>37149
> Просматривать, что происходит.
Лей в лог.
> CMS создают у меня ощущение
СMS сделаны для управления контентом, а не для разработки. Если ты вносишь изменения в СMS и как частный случай изменения в структуру базы, то нужно заводить саму CMS или шаблоны в git писать миграции на базу.
>> No.37154 Reply
>>37153
Я не вношу измнения в структуру базы, я шаблоны натягиваю, верстаю, пишу css и js.
> Лей в лог.
Но ведь это дольше! И не так удобно! И так информативно! Почему похапешники такие простые люди, не стремящиеся вообще никак к увеличению производительности труда?
>> No.37166 Reply
>>37154
> похапешники - обезьяны, не стремящиеся вообще никак к увеличению производительности труда
Пофиксил тебя.
>> No.38102 Reply
File: June_odd-eyed-cat_cropped.jpg
Jpg, 560.33 KB, 1858×1565 - Click the image to expand
edit Find source with google Find source with iqdb
June_odd-eyed-cat_cropped.jpg
Котаничи, есть один говнокод. Как мне сделать так чтобы у классов B и C были разные значения статической переменной lalka?

http://ideone.com/WyXYkY
>> No.38225 Reply
File: Tengen.Toppa.Gurr...
Jpg, 212.42 KB, 1920×1050
edit Find source with google Find source with iqdb
Tengen.Toppa.Gurren-Lagann.full.174481.jpg
File: 1395395614020.png
Png, 1.02 KB, 300×20
edit Find source with google Find source with iqdb
1395395614020.png

Это прорыв, посоны!
http://www.opennet.ru/opennews/art.shtml?num=39368
> Facebook представил новый язык программирования Hack, основанный на синтаксисе языка PHP и предназначенный для выполнения с использованием виртуальной машины HHVM (HipHop Virtual Machine). Приложения на языке Hack могут бесшовно взаимодействовать и сочетаться с существующим кодом на языке PHP, так как окружение HHVM поддерживает выполнение и немодифицированных PHP-скриптов. Код Hack распространяется под свободной лицензией PHP. Реализация языка уже опробована в промышленной эксплуатации, в частности, Facebook уже перешёл на использование Hack и перевёл на данный язык практически весь код своих PHP-проектов.
>> No.38234 Reply
File: six_string_car.jpg
Jpg, 31.87 KB, 720×395 - Click the image to expand
edit Find source with google Find source with iqdb
six_string_car.jpg
>>38225
Пых целиком состоит из фич, бездумно утащенных из других языков. Прорыв заключается в том, что к ним прибавили ещё статическую типизацию, украденную из турбопаса, и дженерики, украденные из шарпа. Пикрелейтед.
>> No.38244 Reply
>>38234
Горбатого могила иправит. Что все так за него держутся? Применяй они вместо него жс, и то лучше было б.
>> No.38247 Reply
File: meme-costume-hipster-ariel.jpg
Jpg, 39.58 KB, 400×475 - Click the image to expand
edit Find source with google Find source with iqdb
meme-costume-hipster-ariel.jpg
>>38244
Или руби например.
>> No.38248 Reply
>>38247
Почему любое отклонение от MySQL+PHP ассоциируется с хипстерами? Что заставляет так безумно держаться за это говно? А ещё говорят:"В вебе всё быстро развивается".
>> No.38250 Reply
File: 6456760-se-470-new.jpg
Jpg, 226.95 KB, 470×628 - Click the image to expand
edit Find source with google Find source with iqdb
6456760-se-470-new.jpg
>>38248
Ну а ты чего хотел? Стереотипы и штампы везде же. Например лисп/эрланг/хацкель-программисты представляются людям как суровые бородатые дядьки.
>> No.38252 Reply
>>38250
Я не это имел в виду. Я говорю, почему так держатся за MySQL+PHP. Тэхнологии развываются не так быстро как мне обещали. Я разочарован.
>> No.38256 Reply
File: 610836089.png
Png, 135.54 KB, 363×443 - Click the image to expand
edit Find source with google Find source with iqdb
610836089.png
>>38225
Лет через 5 пхп превратится в сисярп.
>> No.38257 Reply
>>38256
Что ты имеешь в виду?
>> No.38258 Reply
>>38257
В пых несут всё больше фич из сисярпа, осталось сделать linq например, скоро своего пыхового говна останутся жалкие крохи (типа $ и ->).
>> No.38259 Reply
>>38258
Нубовопрос: а что в php делает ->? Неужели там есть указатели (см. значение оператора -> в C/C++)?
>> No.38260 Reply
>>38259
В пыхе точка - это конкатенация, поэтому доступ в неймспейсу через бэкслеш, к статическим элементам через двойное двоеточие, а стрелка - доступ к элементам объекта. Упорото, неправда ли?
>> No.38261 Reply
>>38260
А эту ссаную точку как оператор конкатенации сделали из-за того что оператор плюс неявно приводит операнды к числовому типу. Вообще в пыхе все эти неявные преобразования являются причиной непонятных логических ошибок, нежели помогают кодить.
>> No.38262 Reply
>>38261
В том же жабаскрипте ещё более наркоманско с одним плюсом, так что это ещё ничего.
>> No.39049 Reply
Есть ли хоть какой-то способ вызвать приватный метод внутри лямбды, созданной внутри метода класса в php 5.3? В методе я могу воспользоваться приватным методом, а в лямбде, которая написана в этом методе, - нет. Нельзя как-нибудь протянуть туда объект или сам приватный метод? Пришлось пока открыть эти методы. Я просто в ахуе с вашего языка. Кроме верстальщика и манагеров больше на нём никто и не может писать, это не для кодеров. Надо найти другую работу, эх...
>> No.39050 Reply
>>38260
> Упорото, неправда ли?
это заимствовано из перл.
>> No.39085 Reply
>>39049
А почему бы не использовать >= 5.4?
>> No.39088 Reply
>>39085
Начальники считают, что нам надо держаться 5.3. Их любимый хостинг из коробки имеет 5.3. И 5.3 - это минимум для их любимой цмски.
>> No.39089 Reply
File: 3Window95_Reuters.jpg
Jpg, 177.46 KB, 940×676 - Click the image to expand
edit Find source with google Find source with iqdb
3Window95_Reuters.jpg
>> No.39095 Reply
File: 484-dicaprio-inception.jpg
Jpg, 14.20 KB, 350×350 - Click the image to expand
edit Find source with google Find source with iqdb
484-dicaprio-inception.jpg
>>39049
> Есть ли хоть какой-то способ вызвать приватный метод внутри лямбды, созданной внутри метода класса в php 5.3?
>> No.39106 Reply
>>39095
Ну ты же даже не представляешь, для чего нужны лямбды, я же уверен. И небось считаешь, что это "ненужное говно". Я прав?
>> No.39123 Reply
>>39106
> Я прав?
Нет, не прав. Просто я считаю, что ты ░░░░░░░░░░░ ░░░░░░.
>> No.39125 Reply
>>39123
Что же я делаю не так? Для чего по-твоему лямбды?
>> No.39328 Reply
Няши, кто может закомментить index.php шаблона джумлы? С меня много доброты.
>> No.39342 Reply
>>39125
Для того, чтобы не выделять имя под функции непонятного или минимального функционала, например инлайнить return 0 для функций с колбеком. Ты реализовал какую-то жирную лямбду со своим методом.
Я бы не ожидал от безкостыльных языков существования обращения к анонимным функциям, но это же php, так что твой вопрос таки имеет смысл.
В нормальных ЯП даже мультистрочные лямбды запилить нельзя, и это совершенно правильно.
>> No.39343 Reply
File: un.jpg
Jpg, 575.59 KB, 1400×785 - Click the image to expand
edit Find source with google Find source with iqdb
un.jpg
>>39342
> считает, что анонимные функции должны чем-то отличаться от именованных
> В нормальных ЯП даже мультистрочные лямбды запилить нельзя, и это совершенно правильно.
> нормальные языки
> Пытхон
>> No.39344 Reply
>>39343
Типичный форчанец детектед.
>> No.39345 Reply
>>39344
Ну как ещё реагировать на рассуждения питонокодера о дизайне языков?
>> No.39346 Reply
>>39345
Питон - идеальный язык, тащемто. Решительно не понимаю твоей истерики.
>> No.39347 Reply
>>39346
Да, человеку, знакомому только с кубейсиком, он действительно таким может показаться.
>> No.39349 Reply
>>39347
Кресты, жаба, шарп, жс, пыха. Говори свой идеальный язык или иди нахуй.
>> No.39351 Reply
File: locksmith.jpg
Jpg, 61.06 KB, 400×291 - Click the image to expand
edit Find source with google Find source with iqdb
locksmith.jpg
>>39349
> Кресты, жаба, шарп, жс, пыха.
Ну, что я говорил. Одна убогая императивщина, один сраный интерпрайз. Это как судить об онеме по полутора хентайным тайтлам: естественно, кейон после этого идеалом покажется.
>> No.39352 Reply
File: 29010.jpg
Jpg, 54.52 KB, 225×350 - Click the image to expand
edit Find source with google Find source with iqdb
29010.jpg
>>39346
Вот например в сисярпе, скале и руби норм ООП, а в питухоне днище какое-то сбоку припека.
>> No.39353 Reply
>>39352
> ООП
> 2014
>> No.39354 Reply
>>39353
Ваши предложения?
>> No.39359 Reply
>>39351
Лол. Чому ты такой жирный?
>> No.39360 Reply
>>39359
Жирный? Я просто в курсе про blup paradox. Бесполезно что-то объяснять человеку с таким гигантским кругозором: жс, кресты, пайтон. Расскажешь ему про системы типов и статическую верификацию, он тебе ответит "а у нас тест-драйвен дивелопмент". Расскажешь ему про модели исполнения, отличные от фортрановской, он ответит "это усложняет код, ненужно". Про чистые функции - "хлебни борща". Всё, что тут можно делать - издеваться.
>> No.39361 Reply
>>39360
> Всё, что тут можно делать - издеваться.
Ну вот и не обижайся.
>> No.39368 Reply
>>39360
Что за blup paradox?
>> No.39369 Reply
File: ЛампочкаСырно.jpeg
Jpeg, 39.07 KB, 400×400 - Click the image to expand
edit Find source with google Find source with iqdb
ЛампочкаСырно.jpeg
>>39368
Ну это как ебаться_
>> No.39370 Reply
File: talking_captcha.png
Png, 0.84 KB, 300×20
edit Find source with google Find source with iqdb
talking_captcha.png
File: kimonotocat.png
Png, 135.35 KB, 896×896
edit Find source with google Find source with iqdb
kimonotocat.png

>>39346
> Питон - идеальный язык
<страшная сказка про строки и кодировки>
Кроме того утиная типизация ни когда не была хороша.
А ещё GIL. А ещё... Да много чего. У каждого ЯП дофига проблем. Нет единственного языка, который можно считать идеальным же. Есть ЯП, которые хорошо решают свои задачи.

Например PHP неплохо умирает, но плохо подходит джля постоянно запущенных прог.
Ruby любят за сладкий синтаксис. До тех пор, пока не заработают диабет.
Кресты. Это целых два языка в одном. Посмотрите код boost и вы поймёте о чём я. Это сильное колдунство. Это чёрная магия.
Няшный просто создан для разговоров с железом без посредников. Только ты, Си, свеча, бокал вина и кусок кремния.
Лисп просто необходим вам если вы любите смайлики. Вы можете изменять программу не вырубая её. Если вы не любите смайлики, то можете попробовать TCL если конечно у вас пол-литра чистого спирта под боком.
Хаскел просто необходим вам в спорах об илитарности. Некоторые используют его в коммерческих разработках, но не вы. Плак плак.
Джаваскрипт используют просто изза отсутствия альтернатив. Кстати это единственный ЯП в мейнстриме с прототипным ООП.
Ява, Сисярп просто необходимы ежели хочется немного абстракционизма. Именно тут лучшее место для применения паттернов. Ты можешь применить все из них и всё равно будет мало.
Perl. Просто Perl. Ты знаешь о чём я.
Лично я стараюсь проповедовать знание множества ЯП. Впрочем я упоролся Golang. С этой дряни сложно слезть. Там есть минимализм. Там только один цикл вместо двух или трёх. Там нет полноценного ООП. Там указатели реальны, но не имеют арифметики. Там хорошая стандартная библиотека и удобный инструментарий. Он хорошо выполняет те задачи, которые мне требуются. Но выбор инструмента зависит от задачи. Иногда выбора нет и ты программируешь на паскале нет, это был лишь кошмарный сон.

:wq
>> No.39371 Reply
File: 764329736.jpg
Jpg, 30.34 KB, 455×301 - Click the image to expand
edit Find source with google Find source with iqdb
764329736.jpg
>> No.39374 Reply
>>39360
> blub paradox
Во первых, опечатка.
Во вторых - я с ним не согласен. Ты же не хочешь покушать говна? Ты же не отрицаешь, что человек неспособен использовать неточные критерии годности?
С точки зрения логики - безумно считать правильной точку зрения только потому, что ее отстаивает тот человек, который её знает. Но выход из парадокса предлагается именно этот. *Я ЕМ ГОВНО, А ЕСЛИ ВАМ ЭТО НЕ НРАВИТСЯ ПОПРОБУЙТЕ ПОЕСТЬ ГОВНО, ЧТОБЫ ЭТО ДОКАЗАТЬ.*
В третьих - языки имеют общие парадигмы и инструменты. Зная некоторую часть их набора, можно аппроксимировать.
>> No.39376 Reply
>>39374
> языки имеют общие парадигмы и инструменты
В тех языках, которые он перечислил, парадигм в сумме наскребётся где-то на полторы.
> Зная некоторую часть их набора, можно аппроксимировать.
Этот набор 1) должен быть полным 2) чёрта с два ты в т.н. "мультипарадигменных" языках изучишь парадигму, которую не знаешь. Дай паскалисту скалу, он будет писать на ней как на паскале, и нахрен ему не сдались остальные фичи.
> безумно считать правильной точку зрения только потому, что ее отстаивает тот человек, который её знает
Дурак что ли? Никто так не считает. Парадокс о том, что человек не может понять, нужно ему знать что-то или нет до тех пор, пока он это не узнает. Правильная, не правильная точка зрения - об этом вообще ничего не говорится. Этот парадокс только говорит, что невежды не должны судить о том, чего не знают.
> Я ЕМ ГОВНО, А ЕСЛИ ВАМ ЭТО НЕ НРАВИТСЯ ПОПРОБУЙТЕ ПОЕСТЬ ГОВНО, ЧТОБЫ ЭТО ДОКАЗАТЬ.
Только на самом деле ты ешь говно прямо сейчас, потому что в жизни не видел никакого хлеба, кроме сладкого. Людская ненависть к познанию чего-то нового вообще забавна.
>> No.39377 Reply
Как я обожаю эти все споры.

>>39376
> невежды не должны судить о том, чего не знают.
Обычно подобное незнание ведёт к срачам о синтаксисах и парадигмах.
> ешь говно прямо сейчас
> не видел никакого хлеба, кроме сладкого
Лол.
> Людская ненависть к познанию чего-то нового вообще забавна.
Попробуй попрограммировать ня Няшном и js до состояния понимания как оно работает в деталях. Заделай маленькую операционку на обоих. Пару игор на яве заделай под ведро. Ещё чегонить заделай. Робота на ардуинке там.

На самом деле декларативное программирование далеко не всем и не всегда подходит. Не инструменты выбирают задачу, а задача инструменты.
>> No.39386 Reply
>>39377
Няша, я где-то полгода занимался мэйнтенансом кода ня няшной. Я починил десятки, пожалуй, самых неочевидных ошибок, которых не было бы в нормальном языке. Няшную пора закапывать вместе с половиной кода на ней.
> js, andriod, arduino
В треде запахло школьными завтраками.
>> No.39399 Reply
>>39386
Няшная нужна железячникам. Для разных задач лучше подходят разные ЯП. А жаль что нет такой серебряной пули, чтоб сразу все парадигмы, норм синтаксис, компиляция в бинарь для продакшена и запуск с jit-компиляции для быстрой разработки.
>> No.39400 Reply
>>39399
> Для разных задач лучше подходят разные ЯП.
Дурень! Я про это в >>39370 написал уже.
>> No.39405 Reply
>>39399
Хватит повторять эту мантру. Няшная придумывалась в те времена, когда альтернативой ей был дырокол. Тогда это был хороший язык. Сейчас на языке, где нет вообще никакой защиты памяти, где с абстракциями можно работать только путём каста в void*, где оптимизирующий компилятор вынужден ванговать желания программиста, может программировать только упоротый мазохист. CS шагнула далеко с тех пор, возможность придумать язык для низкоуровневых вещей с большей защитой от дурака и UB уже есть. Возможно, такие языки уже есть, не интересовался.
Няшная не нужна. Хватит насиловать труп.
>> No.39406 Reply
>>39405
> нет вообще никакой защиты памяти
Есть много мест, где она и ненужна и даже вредна.

Кроме того у Си не отнять возможность превращаться в код на любой платформе. Начиная от arm, avr, x86 и компании, явамашины и заканчивая другими языками включая js.
> Возможно, такие языки уже есть, не интересовался.
D, Rust на сколько я знаю. По меньшей мере.
>> No.39407 Reply
>>39406
> Есть много мест
Как всегда с тебя примеры.
> Кроме того у Си не отнять возможность превращаться в код на любой платформе.
Только работать одинаковый код на разных платформах может по-разному, ага. Кастани, к примеру, указатель на инт в указатель на чар и наслаждайся секасом с endianness. И это обычная практика.
> явамашине
С для jvm? О боги, скажите, что это дело запилил пьяный компиляторщик в шутку.
>> No.39413 Reply
>>39407
> Кастани, к примеру, указатель на инт в указатель на чар
и получи от меня в ебало.
> С для jvm?
Насчет этого не знаю, а вот "C to JS", похоже, есть. Компилируется в JS, требующий либу "asm.js".
>> No.39436 Reply
>>39413
> и получи от меня в ебало.
Это, типа, твой аргумент в пользу того, что на сишке можно писать кроссплатформенный код? Негусто.
Няшка, без этого ты, к примеру, со linux kernel списками работать не сможешь. Короче, я понял: ты очередной даун, думающий, что человек умнее машины и что bondage&discipline должен осуществляться средствами тимлида, а не компилятора. Желаю тебе закончить дни в мейнтенансе дохнущего проекта. Никогда не занимайся разработкой чего-то нового, особенно вещей, связанных с безопасностью и криптографией.
>> No.39437 Reply
>>39413
> Компилируется в JS, требующий либу "asm.js".
Это не либа, а подмножество JS, которое легко оптимизировать. Полноценно есть только в лисе, но и хром неслабо оптимизирует код, написанный в таком стиле. http://asmjs.org/spec/latest/
>> No.40006 Reply
File: 5280788451_8d9bedcb61_z.jpg
Jpg, 126.28 KB, 427×640 - Click the image to expand
edit Find source with google Find source with iqdb
5280788451_8d9bedcb61_z.jpg
Вечер в хату, котаны.
Мне тут на работе для юнит-тестирования пришлось в проекте всё, что вызывает курл, обернуть. Я значит сделал интерфейс CurlWrapperInterface с двумя классами CurlWrapper и CurlTestWrapper данный интерфейс реализующие. Типа сервайс-локатор их потом инстанцирует.
Дык вот, тим лид мне говорит что лучше было вместо интерфейса наследование сделать.
Как по-вашему более феншуйно такую вещь следовало бы с делать?
>> No.40007 Reply
>>40006
Без ООП вообще. В php оно нахуй не сдалось.
>> No.40011 Reply
>>40007
Не смешно. Вообще не смешно нихуя. Что у тебя на работе за задачи и на каком языке? Серьёзно. Если бы ООП было не нужно, то и юнит-тесты и подавно. Тем более как эту задачу решать без ООП уже даже не понятно.
>>40006
А что конкретно тимлид говорит? Если сделать просто CurlTestWrapper наследником CurlWrapper, то вместо трёх сущностей только две и часть CurlWrapper в CurlTestWrapper может быть использована прямо.
>> No.40013 Reply
File: tachikoma2.jpg
Jpg, 311.25 KB, 800×604 - Click the image to expand
edit Find source with google Find source with iqdb
tachikoma2.jpg
>>40011
Он говорит, что наследование проще и понятнее, типа интерфейс там ни к чему. В принципе оставили пока мой вариант, ибо юнит-тесты работают, что главное.
>> No.40584 Reply
File: PHP.JPG
Jpg, 2750.18 KB, 4320×3240 - Click the image to expand
edit Find source with google Find source with iqdb
PHP.JPG
PHP: сила, с которой надо считаться!
>> No.40585 Reply
>>40584
Лойс.
>> No.40586 Reply
File: Cirno.jpg
Jpg, 63.97 KB, 550×550 - Click the image to expand
edit Find source with google Find source with iqdb
Cirno.jpg
Кстати, а где бы почитать о планах разрабов по пхп7?
>> No.40587 Reply
File: Random-cirno-(35).jpg
Jpg, 139.93 KB, 1599×926 - Click the image to expand
edit Find source with google Find source with iqdb
Random-cirno-(35).jpg
>> No.40588 Reply
File: 560.png
Png, 466.21 KB, 600×450 - Click the image to expand
edit Find source with google Find source with iqdb
560.png
>> No.40589 Reply
File: !1302970426478.png
Png, 363.68 KB, 896×1074 - Click the image to expand
edit Find source with google Find source with iqdb
!1302970426478.png
>>40588
В каждой шутке есть доля шутки.
>> No.40590 Reply
File: 1236199911451.jpg
Jpg, 50.57 KB, 333×450 - Click the image to expand
edit Find source with google Find source with iqdb
1236199911451.jpg
File: 1236199911451.jpg
Jpg, 50.57 KB, 333×450
Your censorship settings forbid this file.
unrated
>> No.40600 Reply
>>40584
CAUTION SITE ENTRANCE
>> No.43133 Reply
Можно ли сделать чтобы функция запускалась там где она прописана в коде, а не там где её вызвали ?

Ну то есть:

<?php

function showText()
{
echo("222");
}

echo("111");

showText();

?>

В результате в окне браузера 222 будет идти после 111.

А если мне нужно чтобы 222 шёл перед 111 ? При этот запись "showText();" в коде по прежнему должна быть прописана после "echo("111");" ?





Капча убиваю жалею
>> No.43134 Reply
>>43133
Не хочу тебя обидеть, но это звучит как полный бред. Настолько, что мне стало интересно. Зачем ей идти перед и так вызываться?

Интуиция подсказывает, что возможно у тебя какая-то проблема с имеющимся кодом, которую можно решить, если отловить echo("111"); с помощью ob_ функций. Но это костыль, который используют только в абсолютно исключительных случаях. В пхп арсенале много таких костылей.
>> No.43139 Reply
>>43134
Чёрт, мне всё ещё любопытно, зачем это было нужно.
>> No.43156 Reply
>>43134

Можно еще так сделать:
call_user_func(function() {
    echo "222\n";
});

echo "111\n";
>> No.43204 Reply
Ребята, нуб ИТТ. Что нужно, чтобы написать качалку картинок со страницы?
У меня такое представление:
1. Получить исходный код страницы.
2. С помощью регулярок вычленить все img src=...
3. Адрес засовывать в fileputcontents
4. Продолжать, пока находятся соответствия регулярке на странице.
>> No.43207 Reply
>>43204
Типа того. Но лучше сразу переходи на curl и simplehtmldom.
>> No.43208 Reply
>>43204
Напиши в командной строке:
wget -r -p -np http://страни.ца
>> No.43209 Reply
>>43204
> Адрес засовывать в fileputcontents
Адрес засовывать в массив, а потом просто file_put_contents(json_encode($addresses)). Не нужно думать, что внутри текстового файла, сериализацию уже изобрели.
Кроме того парсеры html уже изобрели и их, вообще говоря, нельзя лепить из регулярок. Есть SimpleHtmlDom, но у меня с ним были траблы, было вроде получше что-то. На поддоменах он у меня рушился вроде.
http://stackoverflow.com/questions/3577641/how-do-you-parse-and-proces[...]n-php
Регулярками ты забудешь про пробелы между img и src, порядком атрибутов в теге, кавычках двойных и одинарных и прочем.
>> No.43210 Reply
>>43204
За использование регулярок для разбора XML/HTML нужно кастрировать столовым ножом.
>> No.43211 Reply
>>43210
Зачем так резко, могут быть причины какие-то. Особенно если хтмл-ку уже кто-то кастрировал чем-то.
>> No.43220 Reply
Ребята, спасибо за ответы. Скриптик с использованием SimpleHtmlDom уже в кроне и ворует картинки с анимешными девочками.
>> No.43263 Reply
File: 14334131747083.jpg
Jpg, 49.91 KB, 604×455 - Click the image to expand
edit Find source with google Find source with iqdb
14334131747083.jpg
Спрошу тут. Посоветуйте хорошую книжечку по пехепе для начинающих. Желательно написанную живым языком, с большим кол-вом примеров и их детальным разбором. Просьба не рекомендовать сайт, который на "народ.ру", знаю его, не понравился..

И ещё глупый вопрос. Что такое библиотеки и как ими пользоваться?

картинка случайная
>> No.43264 Reply
>>43263
> Посоветуйте хорошую по пехепе
/0
> хорошую для начинающих
Снова /0

На php.net есть тьюториал. Сначала учить питон или что-то по нормальной книге, потом полистать php.net. По=хорошему придётся учить ещё и ООП отдельно. Всё остальное, цсс и прочее - тоже отдельно от пехепе.
> Просьба не рекомендовать сайт, который на "народ.ру", знаю его, не понравился
Вообще без понятия, что это мог быть за сайт, если честно
>> No.43265 Reply
>>43263
Скляр Д., Трахтенберг А. PHP. Сборник рецептов.
>> No.43268 Reply
>>43265
Говно мамонта. PHP в этой книге и PHP сейчас - почти как два абсолютно разных языка. 2005 год, лол. Да ещё к тому же хорошие практики и стиль кода вообще не рассматриваются. Даже самые элементарные косяки при написании кода не рассматриваются.
> Однако тот, кто хочет, чтобы PHP был настоящим ОО языком, возможно, будет разочарован. По своей сути PHP - язык процедурноориентированный. Это не Java.
На костёр, лол.

Неймспесы? Автолодер классов? Исключения? Спецификаторы доступа? Анонимные функции? mb_ и utf-8? И т.д. и т.п.

Пишет про global - подтягивание глобальных переменных в функциях и даже не думает написать что-нибудь про то, что это лучше делать как можно реже хотя бы.
> Посимвольная обработка строк
работа с utf-8-строками не разобрана. Решение, которое там указано на кириллице не будет вообще работать.
>> No.43273 Reply
>>43268
> Неймспесы? Автолодер классов? Исключения? Спецификаторы доступа? Анонимные функции? mb_ и utf-8?
Это всё в похапе нинужно. Для задач на таком уровне есть C#, Java, Scala, D, Rust, C++11 наконец.
>> No.43274 Reply
>>43273
Ну так учи C#, Java, Scala, D, Rust, C++11 наконец и не еби вола. Похапе вообще ненужно в принципе, если так. Все задачи уровнем ниже решены в виде готовых решений. На рынке в вакансиях всё вот это нужно. И они решают задачи на таком уровне, нравится тебе(и мне) это или нет. А всякие Scala, D и Rust вообще на задворках. Тем более, речь о синтаксисе, ты без этого чужой код не поймёшь.
>> No.43394 Reply
>>43274
Scala - это подсахаренная Java. Синтаксис учится за час.
>> No.43395 Reply
>>43394
Синтаксис любого языка учится за час. Scala - это gateway drug to Haskell. Вот не надо говорить о том, в чем не разбираешься. Вводишь доброчанек в заблуждение только, хоть прям тред посвященный скале открывай, что жеж такое-то.
>> No.43396 Reply
>>43395
Я прочитал книжку scala for the impatient и полистал исходники ЛОРа например. Да, чуток прифункционаленная, но жаба жабой.
>> No.43397 Reply
>>43396
Вы уже обсуждали это миллион раз. И ни одного нового аргумента.
>> No.43458 Reply
File: PHP.png
Png, 100.07 KB, 309×360 - Click the image to expand
edit Find source with google Find source with iqdb
PHP.png
>> No.43528 Reply
File: 1288789691171.png
Png, 482.64 KB, 600×401 - Click the image to expand
edit Find source with google Find source with iqdb
1288789691171.png
Посоны, накидайте плиз статей о вреде array oriented programming, я на работе тимлиду хочу раскидать за ооп, контракты и всю фигню. А то меня заебали эти блядские массивы в коде повсюду. Кстати коды ошибок возвращать вместо кидания исключений мне тоже не нравится.
>> No.43529 Reply
>>43528
У Мейера долго и муторно в его книге по ООП объясняется, зачем это всё нужно. Но ты их не переучишь. Потому что на изучение ООП можно потратить много времени. Легче сменить работу. Тем более если у вас cmsка вместо фреймфорка, там вообще ооп особо не запилишь.
>> No.43636 Reply
>>43528
> Хочу заставить всех писать строго в ООП-стиле
> Не могу пояснить, чем оно лучше
Вся суть.
>> No.43671 Reply
>>43528
Скажи ему, что php это не тот ЯП, с которым надо думать о производительности. Если нужна производительность, то в первую очередь стоит сменить язык например на golang. Посчитай, сколько времени займёт переписывание и сколько времени это позволит выиграть в будущем. При этом дай пессимистичную и оптимистичную оценку того и другого. Кроме всего этого сделай набросок той архитектуры, которую ты хочешь предложить в замен. Смотри в первую очередь на те участки кода, которые изменяются больше всего с течением времени. На этих участках архитектура должна проявлять гибкость. На остальных не должна. При создании архитектуры следует помнить, что многие в команде могут про твоё ооп не знать. Следовательно архитектуру надо делать максимально простой.
>> No.43672 Reply
>>43671
> с которым надо думать о производительности
Они и так о ней не думают.
> Следовательно архитектуру надо делать максимально простой.
Это люди, для которых написать слово class и extends пару раз, значит написать мега-супер-систему. Они хотят начать вверху файла и внизу закончить. Больше всего бесит, что они реально экономят слова class, extends и function. И файлы экономят. Ну что мешает взять и написать слово function хотя бы ещё раз. Можно подумать, что их бьёт током, каждый раз, когда они видят эти слова. И что плохого, когда много маленьких файлов? Нравится смотреть на портянки длиной в километр с одинм и тем же набором изменяемых переменных на весь файл?
>> No.43675 Reply
>>43672
> Это люди, для которых написать слово class и extends пару раз, значит написать мега-супер-систему.
В таком случае у тебя действительно мало шансов. Я бы применил такую стратегию: рефакторить те части, которые больше всего привлекают моё внимание и на все возгласы не делать подобное, потребовать предъявить веские причины этого не делать. Веские с точки зрения самого кода и его качества, а не с точки зрения "работает - не трожь".
> Они хотят начать вверху файла и внизу закончить.
Само по себе это не является плохим. На мой взгляд разумно делать каждый файл читаемым сверху вниз, а не в рандомной последовательности.
> И что плохого, когда много маленьких файлов?
Смотря на сколько маленьких. Нет особых причин излишне дробить сущности.
>> No.43680 Reply
Добрый день, Доброкодеры.
Полгода назад вернулся из армии и не знаю с чего начать, чтобы сублимировать полтора года отсутствия практики, что вышло нового и интересного? Какие фреймворки интересные появились паттерны и т д... С связи с новой %%дерьмовой, низкооплачиваемой 16ти часовой%% работой думаю вернуться в стезю быдлокодирования программирования в вебе... В перспективе для побега смены работы... За плечами есть опыт, но он уже неактуален - хочу наверстать.
>> No.43684 Reply
>>43680
За полтора года ничего не изменилось, скорее твои знания были устаревшими/недостаточными и до армии.
>> No.44256 Reply
File: php7-logos.jpg
Jpg, 21.72 KB, 599×666 - Click the image to expand
edit Find source with google Find source with iqdb
php7-logos.jpg
Поздравляю, товарищи!
>> No.44257 Reply
>>44256
Пожалуй, пора всё-таки апгрейдиться с php3.
>> No.44258 Reply
>>44257
Пхп7 слишком быстрый для своих задач. Такая скорость нинужна, страницы открываются слишком быстро.
>> No.44259 Reply
>>44258
А ты слипов навставляй.
>> No.44260 Reply
>>44259
Лучше убрать пару индексов.
>> No.44269 Reply
>>44256
Они там совместимость ломают постепенно:
http://www.tonymarston.net/php-mysql/please-do-not-break-our-language.html
There are two things I expect from a language if I am going to continue using it for any length of time - stability and longevity. This means that code which I wrote 10 years ago should still run today, and should still run 10 years from now. There may be new features added to language, but the choice of whether or not to use these new features should be mine and mine alone. If I am forced to modify my code with each new version of PHP then I am unlikely to adopt each new version of PHP.
>> No.44270 Reply
>>44269
Если бы пхп был с самого начала был спроектирован нормальными дядьками, а не был стихийно образовавшеся кучей мусора, то с этим бы проще было. А так приходится со временем выгребать мусор. Мы портировали с 5.5 на 7 проект в 200 тыщ строк без особых проблем.
>> No.44271 Reply
>>44269
Пхп это такой дом в много слоев говна и палок.
Теперь разработчики пробуют заменить это на что-то нормальное, а поселившимся бомжам и так норм, они привыкли.
>> No.44280 Reply
>>44271
> заменить это на что-то нормальное
Но зачем? Он же держится на этих бомжах, а для "чего-то нормального" есть другие языки.
>> No.44281 Reply
>>44280
Ответ на этот вопрос никто не знает. Я пошёл в пхп, так как думал, что там вакансий больше. работадатели выбирают его, думая, что там больше кадров. Лучше бы я пошёл в джаву. Хочу как-нбудь всё таки пересть на неё или куда-нибудь.
>> No.44283 Reply
>>44280
Что ломают совместимость, это хорошо. Ибо всё, что можно было написать, уже написано по десять-двадцать раз. Чтобы дать программистам работу, нужно поломать совместимость. Тогда работодатели начнут снова платить программистам, чтобы исправили вновь появившиеся ошибки.
>> No.44284 Reply
>>44281
Большинство ЯП похожи друг на друга, главное - знать и понимать основные концепции и технологии программирования.
>> No.44288 Reply
>>44283
Честно говоря эта параноидальная байка вымораживает. У меня от неё бровь дёргается. Ничего ещё не написали. И всех программ никогда не напишут. Программисты - это не люди, которые пишут код, это люди, которые определяют сущности и связи между ними в строго формализованной форме. Серебряных пуль, решающих все возможные задачи, не существует и не существовало. У Брукса ещё в 80-х было очень много написано на эту тему. Причём, чем больше задач начинает решать программа, и чем больше разных входных данных она может брать, и чем больше у неё гибкости, тем сложнее она становится в обращении и тем сложнее и дольше на ней решается отдельно взятая задача. Если увеличивать функциональность бесконечно, то никто кроме программистов уже не сможет её использовать.
>> No.44289 Reply
>>44288
За последние годы вообще такой зоопарк всяких технологий развели, что специалистов даже не хватает. А тут работы нет, лол.
>> No.44291 Reply
>>44289
Да вряд ли это из-за зоопарка.
>> No.44292 Reply
>>44288
> Ничего ещё не написали.
Всё написано. Всегда есть библиотека (фреймворк, CMS, движок), которая решает задачу твоей программы эффективнее, чем твоя программа.
>> No.44293 Reply
>>44292
Отлично, буду устанавливать клиентам фреймворк или движок и говорить:"Вот вам фреймворк, документация - там, счастливо оставаться".
>> No.44294 Reply
>>44293
Так всегда и делают. Ставят CMS, натягивают шаблон и не пишут ни страницы кода.
>> No.44295 Reply
>>44294
Для сайтов-визиток и интернет-магазинов - да, но, прикинь, на рынке есть и другие ниши, особенно энтерпрайз всякий. К тому же всегда кому-то дико печёт от того, что в его движке нет фичи Х и пошло-поехало.
>> No.44296 Reply
>>44295
Именно для энтерпрайза характерно доминирование коробочных решений. Визитку можно написать самостоятельно, или на самописной CMS. А в каком-нибудь битриксе программирования будет нуль.
Программисты уже давно перестали собственно программировать.
>> No.44298 Reply
>>44296
Зачем ты пытаешься мне объяснить, что я "уже давно перестал собственно программировать"? Энетерпрайз в смысле системы расчёта расходов, бух. учёт, эффективность, автоматизация бумажной волокиты и т.п. Пых стал меняться, когда его стали туда пихать.
>> No.44303 Reply
>>44292
Ты ретард, фреймворк - это инфраструктурный каркас разрабатываемого веб-приложения, дающий тебе немного абстракции над источниками данных.
>> No.44308 Reply
>>44289
Фокус в том, что современный зоопарк может сам себя обслуживать, имеет встроенные средства диагностики и выучиться управлять им - всё равно что научиться ездить на автомобиле. Может ты не будешь пилотом Формулы или асом езды по бездорожью, но в стандартных применениях ты всяко вырулишь. И в итоге как раз работы нет для специалистов, потому что тех, кто может копаться в кишочках, требуется не так много, как тех, кто может прочитать инструкцию, поставить галочки где надо или ввести нужные команды.
>> No.44319 Reply
>>44308
Работы полно.
>> No.44320 Reply
>>44319
Почему тогда в моём регионе нужны только эникеи для выездов к заказчику для переустановки Уиндоуз?
>> No.44324 Reply
>>44320
Ну регионы - они такие. В миллионниках полно работы. Электричка, переезд или удалёнка.
>> No.44326 Reply
>>44319
Большинство задач, стоявших перед веб-программистами несколько лет назад, решены джумлой.
>> No.44331 Reply
>>44326
Веб не для сайтов.
>> No.44357 Reply
>>44326
А оставшихся задач им хватит на безбедное существование еще лет так 30-40...
>> No.44583 Reply
>>23244
> Во-первых, ядро линукса появилось в 1991 году, а нормальной десктопной операционной системы на базе этого ядра, по моему мнению, до сих пор нет
> Ubuntu
> Mint
> Debian
> ArcLinux
Парень, ты вообще опыт в работе хоть с одним дистрибутивом имел дело?
>> No.44584 Reply
Я читаю вас и вижу, что большинство из вас дилетанты. Понимаю, кровь бурлит и всё такое, но заставьте себя не делать чёрно-белые выводы, особенно если знаете, что в вопросе нет.
>> No.44585 Reply
>>44326
Ты с джумлой много работал? А с другими CMS? Ты понимаешь, что джумла это довольно популярная, но крайне уязвимая система?
>> No.44754 Reply
В пхп есть нормальный способ сделать такое? http://ideone.com/3WGK6T
Т.е. прогнать некоторый код для списка значений и записать результат обратно.
Хотя там даже map через жопу.
>> No.44755 Reply
>>44754
Чем тебя array_walk не устраивает, ёбт?
>> No.44756 Reply
>>44755
Надо делать промежуточный массив и потом распиливать обратно. А если в числе значений и массив прокрутить нужно, то придется отдельную функцию заводить, а не инлайновую.
>> No.44757 Reply
>>44754
В пыхе даже нормальной функции, чтобы проитерировать по строке с UTF-8 символами нет. Она у всех тупо где-то написана и лежит. К слову, странно, что в php мало(я не слышал о них) каких-то популярных библиотек со вспомогательными функциями.
>> No.44772 Reply
>>44757
> чтобы проитерировать по строке
Пиши в функциональном стиле. В функциональном. Не надо итерировать строки.
>> No.44776 Reply
>>44772
Что ты несёшь? Нахуй ты придираешься? Итерировать в любом смысле нельзя их, никаких мапов и редьюсов для них нет. Сука, заебали уже эти студенты, поработайте немного.
>> No.44826 Reply
>>44776
Ну вот нафига тебе итерировать по строке? Хоть один пример приведи.
>> No.44832 Reply
>>44826
Я уже и не помню, зачем нужно было. Согласен, не очень то часто нужно. Но тем не менее.
>> No.44949 Reply
>>23260
debian+kde норм?
>> No.44998 Reply
>>44583
Я имею и что тебе не нравится?
>> No.46416 Reply
Начал обмазываться CodeIgniter, у кого-нибудь может есть готовые проекты, глянуть исходники, почерпнуть опыта?
>> No.46424 Reply
>>46416
Обмазывался этим говном на прошлой работе, после чего пытался устроиться джуном в продвинутые конторы в которых все дрочат на юи и прочие симфони и пососал хуй там, наверное не сколько из-за знаний а из-за того что хуево в целом общаюсь, и не прохожу через hr-шкур.

В общем вроде как устроился на новую сейчас, тоже на игнайтере буду писать. Спрашивай ответы если что. Проектов показать не могу, но на вопросы отвечу по мере сил.
>> No.46429 Reply
>>46424
Как у вас реализована авторизация юзверей?
>> No.46432 Reply
>>46429
Ну как и везде наверное.
Есть страничка с логином, юзер вбивает туда свой логин/мыло + пароль.
Жмет кнопочку, это улетает постом на какой-нибудь контроллер авторизации по типу site/auth

Собственно этот контроллер делает запрос в модель, для выяснения, есть ли такой юзер в базе, если есть и его можно пускать на сайт, то ставишь ему куки, которые потом будут аутентифицироваться другими твоими контроллерами и редиректишь куда ему нужно. Задавай вопросы поточнее в след раз.
>> No.46439 Reply
>>46432
У вас самописный код, или взяты уже готовые либы? Например Auth уже есть готовая.
>> No.46440 Reply
>>46432
Эм, где-то тут ещё должно было быть шифрование пароля. Оно там есть?
>> No.46442 Reply
File: 07e454.jpg
Jpg, 71.54 KB, 604×460 - Click the image to expand
edit Find source with google Find source with iqdb
07e454.jpg
>>46440
Нет, мы так пороли в базе храним, прям.
>> No.46443 Reply
>>46440
php.net/manual/en/function.password-hash.php и http://php.net/manual/en/function.password-verify.php
>> No.46444 Reply
>>46442
> пороли
Недостаточно, видимо.
>> No.46445 Reply
>>46439
Да всё самописное. Просто используется игнайтеровская архитектура и встроенные вещи.
Auth я тебе как пример привел. В игнайтере ты создаешь контроллер name
И вызывается он по урлу your.site/name

Контроллер выглядит примерно так, там и писать-то нечего (хотел ссылку на ideone.com дать, но он упал и проебал мой код который написал тебе в торопях, так что сори)

>>46440
Ну как бы по умолчанию всегда есть.
Шифруешь пароль как тебе угодно, складываешь в базу хэш, потом когда тебе приходит от логинящегося юзера пароль, то ты его тоже шифруешь и сравниваешь эти хеши.
>> No.46447 Reply
>>46445
Это все на первых страницах мануала написано. Может есть моменты которые не описаны в официальной документации, но на которые стоит обратить внимание?
>> No.46448 Reply
>>46447
Обрати внимание на то, как сделать так что бы вместо дефолтного
site.com/index.php/controller/method

делать красивые урлы
site.com/controller/method

А так рассказал бы чем занимаешься, показал бы код какой-нибудь сомнительный для тебя и почему вообще начал на игнайтере писать?
>> No.46449 Reply
>>46448
Так это маршрутизация простейшая, в конфиге правится.

Пишу простейшую автоматизацию предприятия.
>> No.46467 Reply
File: php-noob-1.png
Png, 33.40 KB, 500×500
edit Find source with google Find source with iqdb
php-noob-1.png
File: cat-cafe-osaka.jpg
Jpg, 157.58 KB, 1024×683
edit Find source with google Find source with iqdb
cat-cafe-osaka.jpg
File: cat-sad.jpg
Jpg, 194.05 KB, 1024×768
edit Find source with google Find source with iqdb
cat-sad.jpg
File: Imagery-hitagi-se...
Png, 364.37 KB, 1920×1080
edit Find source with google Find source with iqdb
Imagery-hitagi-senjougahara-34535417-1920-1080.png

Всем привет.

Мы - клуб любителей изучать php (на самом деле не только php, но и html/css, js, mysql, в общем, все, что связано с сайтостроением). К сожалению, наш уютный тредик на известном форуме последние несколько дней недоступен, потому мы решили временно перебраться сюда. Надеюсь, никто не будет против.

Наш клуб для начинающих. Не написал за свою жизнь ни одной программы и имеешь тройку по математике? Добро пожаловать.

Здесь мы обсуждаем решение задачек, задаем вопросы, если что-то непонятно.

Оригинальный тред с 700 постов выглядел так: http://arhivach.org/thread/197740/ Никто не забыт, ни один ваш пост или вопрос не потерян. Там же есть ОП пост с множеством полезных ссылок.

Мы пришли не с пустыми руками. У нас есть уроки (немного), задачки (много) и полезные ссылки для изучающих PHP:

- учебник по основам php для начинающих: http://archive-ipq-co.narod.ru/
- после него стоит прочесть урок про то, как работает веб-сервер https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- далее, пора переходить от изучения основ php к написанию веб-приложений. Для этого у нас есть задача про список студентов с подробными комментариями: https://github.com/codedokode/pasta/blob/master/student-list.md
- более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- задачки для изучения HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- задачки для изучения JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- задачки по MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md
- еще более сложная задача на Yii или Symfony: https://gist.github.com/codedokode/8733007
- еще сложнее надо? Ну держи, сам попросил, задача про SPA: https://github.com/codedokode/pasta/blob/master/js/spa.md - пока никто не решил
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- Книги по PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книги по PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования

Еще у нас есть уютный гитхаб с разными черновиками уроков. Интересно, что такое dependency injection, как хранить древовидные комментарии в базе данных, как защититься от XSS, что такое active record, как использовать композер для автозагрузки - все это описано тут: https://github.com/codedokode/pasta/

Остальные ссылки я постить не буду, при желании их легко найти в ОП-посте на архиваче.

Не забывай про оформление кода. Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Платиновые вопросы:

- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
>> No.46468 Reply
>>46449
У тебя до игнайтера уже был опыт кодинга?
>> No.46469 Reply
>>46468
Да. Тот же PHP, Python, C, Basic, Java.
>> No.46470 Reply
>>46469
Тогда моя помощь тебе вряд ли нужна :(
>> No.46506 Reply
>>46467
> редактор кода - Sublime Text 3, Notepad++, PhpStorm
А где вим и емакс, охуели чтоли хипсторы сиране?
>> No.46507 Reply
>>23225
Кодинг это не легкие деньги. Это плата за кровоточащие глаза, бессонные ночи и перегруженный мозг. Последнее это самый ад. Восемь ,а у кого-то четырнадцать часов в день ты должен думать. Что бы ты понял что это: попробуй весь день решать задачи по алгебре за 11 класс, например. Это выматывает, это монотонный труд, это конкуренция со всех сторон, и уж тем более в том стаке, который ты выбрал. Уйдут годы прежде чем ты сможешь сказать что освоил PHP, или вообще любой язык. Если тебе нужны легкие деньги - займись продажами, бизнесом, чем угодно, но не программированием.
>> No.46508 Reply
>>46507
Но когда тебе под 30 и умеешь только кодить на трех с половиной ЯП, обратной дороги уже нет.
>> No.46509 Reply
>>46508
Это не про ОПа
>> No.46510 Reply
>>46509
Опенинг пост был запилен в 2012, может уже про него.
>> No.46511 Reply
>>46506
Ну-ка надень цак!
>>46507
> кровоточащие глаза, бессонные ночи
Мои глаза и ночи нормальные, не знаю, о чём ты. Да и мозг не грузят тупые люди как на других работах типа кассира.
> Уйдут годы прежде чем ты сможешь сказать что освоил PHP
Осваивать PHP годами не выглядит хорошей идеей. Тем более PHP вообще не для этого придуман.
>> No.46520 Reply
Репост с кафедры сайтостроения.
Насколько имеет смысл для небольшого проекта на php делать его не в одном файле, а в множестве модулей? В одном файле я и так использовал MVC почти правильно, весит меньше 50кб. Правильнее разбивать на несколько файлов, но целесообразно ли?
>> No.46523 Reply
>>46520
Почти всегда нужно. Исключение - консольный скриптик, который делает исключительно небольшую задачу в строк 100 кода.
>> No.46524 Reply
>>46520
Почему у новичков всё время пылает жаром эта мания что-нибудь убрать? Зачем много файлов, зачем IDE, зачем то, зачем это. Посоветуйте мне ЯП для новичков, книгу для тупых, редактор кода для дибилов. А давайте без jQuery, давайте без фреймворка, давайте без CMS. Это какая-то абсолютно иррациональная тенденция. Причём постоянно аргумент, что надо учить что-то. Мне кажется, они и и унитаз смывать ведром должны, потому что бачком же ещё учиться надо пользоваться! И вообще он не нужен, так как можно и без него!
>> No.46525 Reply
>>46524
Потому что ты накропал свою хуитку на коленке в блокноте и всё работает, а тут тебе говорят, что нужно иде, фреймворк, мвц, композер, гит и прочая сотона. Он хочет зделоть сайт, а не академиком быть.

В этом плане алтфакам больше повезло, потому что раньше такая дичь была в порядке вещей, и этот тулчейн нарастал понемногу и повышал удобство. А сейчас нужно дохуя всего сразу знать, чтобы просто начать, без особого понимания, зачем это вообще надо.
>> No.46526 Reply
>>46524
В школе сначала числа складывать учат, а только потом брать производную. Так же и тут.
>> No.46528 Reply
>>46526
Да но числа складывают с самого начала самые настоящие. И даже после окончания школы ты всегда складываешь одинаково. И не было никаких чисел для новичков. И всегда была тетрадь и ручка обязательно. И линейка, и карандаш с циркулем.
>> No.46529 Reply
>>46528
Ну так и приложения пишут без фреймворков настоящие (только маленькие), чтобы сначала самому научиться разбивать код на классы и изучить MVC, а потом уже пользуются фреймворком, где уже это разделение сделано.

Есть такие люди, которые не изучают материал последовательно, а пропускают какие-то темы, их немало, но фактически они ведь не умеют программировать, а умеют править код "по аналогии" с увиденным где-то. Чуть что не так или надо что-то нестандартное - они запутались.
>> No.46531 Reply
>>46520
Именно в этом языке "программирования" все переменные попадают в общую область видимости, так что дели программу хотя бы на классы в пространствах имён. MVC может и нинужно, у меня целое Домащнее СТРОНИЧИЩШЕ написано без MVC и у меня всё работает.
>> No.46533 Reply
>>46531
Во всяком случае в функциях области видимости нормальные в пыхе. Внутри функций переменные нормально скрыты. Так что классы и, тем более, пространства имён теоретически не обязательны. Одних функций достаточно для областей видимости переменных.
>> No.46534 Reply
>>46531
Я в однофайловом движке создал три класса - Model, View и Controller, в них уже конкретные функции. Неправильно сделал то, что клиент может запрашивать вид (если видимая страница) либо контроллер (если посылает данные), а должен запрашивать только контроллер, который в простейшем случае отдает вид. Ну и логики в виде как-то много получилось. Первая попытка использования MVC, поэтому каша получилась.
>> No.46535 Reply
File: Снимок-экрана-от-2016-10-06-20-43-41.png
Png, 84.53 KB, 991×809 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-10-06-20-43-41.png
Знание PHP у меня как хобби не гуманитарий, просто технология-то несложная, стыдно совсем не знать, тем более около-айтишник, в следующем проекте буду использовать пикрилейтед. Велосипедист, да.
с: неплохо стыдно
>> No.46536 Reply
>>46535
У меня это тоже не основной язык, но иногда требуют, поэтому я перекатился на http://www.slimframework.com/ и делаю минимальный бэкенд, а морды полностью фронтендовые на ангулярах, лол.
>> No.46537 Reply
>> No.46538 Reply
>>46536
Я слышал слух что ангуляр вообще не решает, но решает реакт.
>> No.46539 Reply
>>46537
Какие-нибудь пояснения к ссылке? Что ты этим хотел сказать?
>> No.46540 Reply
>>46538
А ещё раньше были всякие бэкбоны. Ещё не устаканилась область, прыгает с одного на другое.
У меня наработки уже есть, использую ангуляр. Можно будет и реакт посмотреть по случаю.
>> No.46541 Reply
>>46539
The closing ?> tag MUST be omitted from files containing only PHP.
Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting.
Control structure keywords MUST have one space after them; method and function calls MUST NOT.
The body of each structure MUST be enclosed by braces.
Вместо того костыля с загрузкой файлов в оперативу и эвал http://www.php-fig.org/psr/psr-4/
>> No.46542 Reply
>>46541
Зачем человеку без знания базовых принципов эти подсчёты пробелов? ну зачем? Тут бы сначала с eval и global разобраться, а ты тут со своими пробелами. Чтение PSR ему в самую последнюю очередь поможет.
>> No.46543 Reply
>>46542
Ну ок, пусть пишет как хочет, я же ему не тимлид.
>> No.46544 Reply
File: Снимок-экрана-от-2016-10-06-22-47-03.png
Png, 201.54 KB, 1920×1080 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-10-06-22-47-03.png
>>46541
Спасибо за советы, все же буду писать правильней. За автолодер читал раньше, но руки не дошли, а сейчас использовал. Дальше еще покурю неймспейсы.
>> No.46545 Reply
>>46544
Автолодер, автолодер... Вместо eval(filegetcontents можно было элементарно использовать include/require для начала. Если не знаешь, зачем нужны классы, и как их использовать, то от автолодера толку почти никакого. А это ещё учить и учить, и лучше вообще не в книгах по пыхе.
>> No.46546 Reply
>>46545
С requireonce и includeonce у меня проблема была - как путь не указывал, относительный или абсолютный, файл не находился, если я инклуд использовал в функции, а если без once, тогда некоторые файлы подключались дважды. Впрочем, попробую просто без функции подключать.
Да, а есть ли толк от ООП, если собственно много объектов не создается, а просто нужно работать со страницами, используя MVC?
>> No.46547 Reply
>>46546
Чтобы узнать толк в ООП придётся идти и читать книги по нему.
1) MVC - это уже ООП
2) Для якобы просто страниц можно было без MVC обойтись, не то что остального ООП. Вообще можно было накидать html-файлов без php и всё, или установить готовую CMS
3) Количество созданных объектов - это не часть задачи, а часть решения. Решение по задаче, а не решение по решению, туды его мать.
4) Объекты и есть ООП
>> No.46548 Reply
>>46547
Я к тому, что если разделить сущности на модели, виды и контроллеры, то можно же создавать функции, к примеру Model_MainPage, так же все остальные, и собственно классы не обязательно нужны. Выглядеть только будет криво, так?
>> No.46550 Reply
>>46548
"Выглядеть криво" - это дет. сад. Должны быть более точные критерии качества ПО. У всех приёмов есть описанные преимущества и недостатки.
Вью далеко не во всех фреймворках имеет свой класс какой-то. Контроллер можно теоретически заменить на функцию. Модель без класса или абстрактного типа - это не модель.
>> No.46553 Reply
Что скажите о курсах специалист по php?
>> No.46554 Reply
>>46553
Скажу, что любой рашкованский пережёванный (в лучшем случае) скам нинужен. Потрать время или деньги на английский язык и весь мир для тебя открыт.
Хотя в рашке до сих пор даже в школе навязывают империализм и русскоязычную челюсть, так что тут всё печально.
>> No.46555 Reply
>>46554
Зачем так грубо. Ты сам(и я и собеседник) россияне. Не надо так.
По php всё равно нет хороших книг даже на Инглише. Учи английский - не учи, на ёлку не похоже. Учишься программировать, потом осваиваешь php по документации на офф. сайте за пару дней, как-то так.
>> No.46556 Reply
>>46555
Я не россиянин.
На русском языке годных книг нет. Есть переведенные книги с задержкой в n лет, умноженные на долбоебизм переводчика, который в 90% не в курсе, о чем он переводит. Есть оригинальная российская хуйня, которая как мода Усть-Залупинска на фоне Москвы.

Учишь английский язык - получаешь актуальную информацию об айти-технологиях, которые уже давно 100% англоязычные.
>> No.46557 Reply
>>46556
Усть-Залупинск - это где?
>> No.46558 Reply
>>46557
За МКАДом, очевидно же.
>> No.46561 Reply
>>46520
Файл на 50к - это ведь больше 1000 строк? Многовато.

С большими файлами неудобно работать, потому в PHP принато в случае ООП класть каждый класс в отдельный файл, имя которого совпадает с именем класса (PSR-4). В случае функций, тоже обычно разбивают на несколько файлов.

Конечно, важно обходиться без фанатизма и не делать кучу файлов по 10 строк, между которыми надо постоянно переключаться.

Если ты используешь MVC, у тебя есть контроллеры. модели - вот их и надо разносить в разные файлы. Это только на пользу пойдет, так как когда ты например смотришь на контроллер новостей, другие контроллеры тебе и не нужны.

>>46525

Если ты написал код и его больше никогда не увидит ни 1 человек (ну например, его зашьют в чип и удалят исходники) - ок, пиши как тебе нравится. Но если твой код будут читать и поддерживать другие люди, надо позаботиться, чтобы им было удобно. Или если поддерживать будешь ты сам.

Инженеры тоже ведь чертят свои чертежи аккуратно и по стандартам, а не как попало. Программирование - область более молодая, тут это все еще не устоялось. Вот такой вот программист, которому лень изучать хорошие практики или аккуратно оформлять код - это как инженер, который чертеж ручкой нарисует, придумывая собственные обозначения.

Раньше просто программы были проще и меньше, и писать их мог 1 человек, и недостатки не бросались в глаза.
>> No.46562 Reply
>>46531
Насчет переменных - неправда, не все, а только созданные вне функций. Их потому и называют глобальными. Ты тащишь концепты из другого языка и удивляешься почему в php они не работают.

Мы твою домашнюю страницу не видели и не знаем, насколько она сложная, насколько удобно в ней разбираться и править что-то.

>>46535

Если честно, не очень. Ты не PHP, ни даже HTTP не знаешь (при ошибке надо отдавать код ошибки, а не 200!). eval там не нужен, есть require, а также автозагрузка. Стандарты PSR-1,2 не соблюдаются.

>>46538

Это немного разные вещи вообще-то.

>>46542

Неправда. Если учиться по учебнику, где код по стандарту оформлен, то у тебя само собой будет все писаться правильно (по аналогии). Анон просто какой-то неграмотный учебник читал судя по всему, или из другого языка пришел и особо в пхп не разбирался.

>>46544

Если что, у меня есть статья про неймспейсы и PSR-4 (правда она для новичков, может слишком простым языком написана, тогда читай оф мануал): https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>46546

Надо было разобраться, почему. Скорее всего ты указал неправильный путь. Относительные пути не советую, так как алгоритм поиска там запутанный и может найти не то (особенно когда у тебя много проектов на компьютере). Не веришь - сам посмотри в мануале и попробуй понять как он файлы ищет.

А с абсолютным именем все ок.

>>46546

Если ты ООП знаешь, то просто удобнее на нем писать становится.

>>46548

В MVC вряд ли может быть Model_MainPage, разве что Controller\Main. Модели не соответствуют страницам сайта, они соответствуют сущностям предметной области. И не путай модель в смысле "часть приложения MVC" и "модель сущности предметной области". В первом случае модель это набор классов, во втором - один класс.

Вью обычно это просто шаблон страницы.

>>46554

Вообще, конечно, если бы качественная литература была на русском, было бы лучше. Я вот часто вижу в мануалах технических, что есть японская версия. Немецкая, испанская, французская. А русской нет.
>> No.46563 Reply
>>46562
> Я вот часто вижу в мануалах технических, что есть японская версия. Немецкая, испанская, французская.
Не так уж и часто. Все учат один язык, где бы они ни обитали, и не парятся.
>> No.46564 Reply
>>46562
ModelMainPage по ошибке написал, ViewMainPage конечно. За статью спасибо.
>> No.46573 Reply
>>46564
MVC не требует использования ООП. Просто с ООП удобнее разбивать код на классы, чем на просто функции.
>> No.46576 Reply
Сап
>> No.46578 Reply
>>46576
Привет.
>> No.46589 Reply
>>46578
Как дела? Что делаешь?
>> No.46596 Reply
>>46589
Захожу в тред по утрам пока завтракаю, прежде чем отправиться в рабство
>> No.46602 Reply
>>46596
Ясно.
>> No.46611 Reply
Никто не хочет кулстори рассказать, о том как докатились до кодинга и какое место он в жизни занимает?
>> No.46612 Reply
>>46611
Это категорически неинтересно.
>> No.46647 Reply
На двачах тихо, залью сюда может код?
>> No.46648 Reply
>>46647
Для заливки кода есть гитхаб/битбакет.
>> No.46649 Reply
>>46648
Няша, я про ссылочки на идеон же )
>> No.46692 Reply
>>46647
Если ты про клуб php, то там тред вполне себе жив (просто надо пару страниц прокрутить до него), и можно запостить все там, ОП дойдет и проверит рано или поздно.
>> No.46884 Reply
File: 22172b280ac75fa3388e2e3b63218dcc_lrg.jpg
Jpg, 30.00 KB, 257×300 - Click the image to expand
edit Find source with google Find source with iqdb
22172b280ac75fa3388e2e3b63218dcc_lrg.jpg
PHP 7.1 релизнулся.
Из новых фич самый смак: нулабельные типы, тип void для результата, сахарок в дестракчеринге через list, видимость констант.
>> No.46885 Reply
>>46884
Ололо.
Блеск и нищета php. Эволюция языка от 4.x к 7.1
https://habrahabr.ru/post/316506/
>> No.46886 Reply
>>46884
То, что в других языках было лет 25 назад.
>> No.47006 Reply
File: Screenshot_20161224_204841.png
Png, 59.55 KB, 940×391 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_20161224_204841.png
Котаны, вопрос не совсем про пых, я тут делаю небольшой наколенный mvc-недофреймворк типа для портфолио, сделал замеры через apache benchmark. Там цифры про 1000 запросов в зависимости от параметра -c. Столбцы A, B - с включенным opcache; C, D - без opcache. A, C - time per request; B, D - time per request (mean, across all concurrent requests).
Не совсем понимаю что значит эти across all concurrent requests, кто-нибудь может подсказать?
>> No.47097 Reply
Пожалуйста посоветуйте что-нибудь простое по основам PHP.
>> No.47098 Reply
>>47097
Оф документация?
>> No.47118 Reply
>>47097
Лиспачую php.net, сам по этой штуке изучал пхп в далеком 2003 году.
>> No.47147 Reply
>>47006
https://httpd.apache.org/docs/2.4/programs/ab.html

> Time per request
> The average time spent per request. The first value is calculated with the formula concurrency timetaken 1000 / done while the second value is calculated with the formula timetaken * 1000 / done

Это не то?
>> No.47413 Reply
File: 25756.jpg
Jpg, 87.12 KB, 300×455 - Click the image to expand
edit Find source with google Find source with iqdb
25756.jpg
>>47097
Прям ваще для нубов. Ну и офф.дока само собой.
>> No.47425 Reply
Так как ОП пока забанен на другой борде, он будет пока писать ответы на задания здесь.

Вот некоторые ответы из предыдущего треда, которые остались в архиваче:

- https://github.com/never3ver/fileshare - проверено 19 марта: http://arhivach.org/thread/245785/#956732
- DOM который построил Джек, 5: http://arhivach.org/thread/245785/#956739

----

Вопрос

http://arhivach.org/thread/245785/#958664
22/03/17 Срд 00:55:27 №958664

Решаю задачу с регулярками, где надо из номера телефонов привести к единому виду, "8" и 10 цифр, без пробелов и так далее, но не могу додуматься, как в одно действие заменить и на "8" - "+7", и в то же время заменить символы "- ()" на пустоту, делаю в два действия. Это нормально или не очень? (строки 31-34)

http://ideone.com/xkk3U1

Ответ

Не требуется делать это в одно действие, можно в два.

> [- \\)\\(]
Внутри квадратных скобок специальное значение имеют только символы: [ ] \ - ^

Все остальные символы, в том числе круглые скобки, экранировать не требуется.

> ([0-9])
Тут круглые скобки вокруг квадратных не требуются. Ну и вообще что-то многовато круглых скобок, там, где они не требуются для группировки, их стоит убрать.

> '/\\+7/ui';
Здесь лучше добавить условие, что это должно быть в начале строки

Так, в общем, верно.
>> No.47426 Reply
Вопрос

http://arhivach.org/thread/245785/#957320

ОП ПАМАХИ Аноним 20/03/17 Пнд 08:57:35 #973 №957320

оп, посмотри, пожалуйста, и подскажи, в чем проблема
https://github.com/sylenien/students-exercise/tree/master

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

Ответ

> you need database called 'students' with table called 'students' which will includes 4 columns: id, firstname, lastname, group, points
Не, так не годится. По моему это написано в комментариях к задаче, надо сделать дамп в формате SQL, с кодом для CREATE TABLE. Код создания БД (CREATE DATABASE) там не должен быть.

> iniset('displayerrors', 1);
Это наверно лучше в php.ini задавать. А то ты на реальный сайт тоже с включенным отображением ошибок выгружать будешь?

Название папки vendor выбрано не очень удачно, обычно это папка, которая управляется composer.

Плохо что у тебя весь код лежит в публичной папке сервера. Зачем это? Что, посетителям нужно иметь возможность скачать все файлы? Надо сделать отдельную публичную папку, а остальное положить за ее пределы. Опять же это описано в комментариях, почитай их внимательно.

https://github.com/sylenien/students-exercise/blob/master/vendor/moonframe/core/autoload.php#L7
> if (is_dir($rootDir))
> else return false;
У тебя функция возвращает массив/false, но при ее вызове ты никак не проверяешь, что она вернула. Вопрос, а какой смысл тогда их возвращать?

Также, неправильный способ возврата значения: либо массив, либо false. надо возвращать знаечния одного типа, иначе с ними неудобно работать.

Вообще, надо использовать исключения, а сейчас у тебя очень неправильно все сделано: ты указал неправильную папку и никакого сообщения, что она неправильная, в логи не пишется, не выводится на экран, программа не падает. А как ты тогда узнаешь что ты допустил ошибку, если ты о ней не сообщаешь?

Также вместо изобретения велосипедов советую опять же почитать комментарии к задаче и про стандарт PSR-4.

Также, попробуй написать код вроде

vardump(classexists('\model\x\y\z'));

У тебя он вызовет ошибку, а должен не вызывать. Опять же, это написаго в моем уроке про автозагрузку.

Плюс, у тебя неправильно сделано разделение на фреймворк и приложение. Фреймворк вынесен в отдельную папку, как будто это сторонняя библиотека.

По идее приложение использует фреймворк и знает все о нем, а фреймворк - не знает, как будет устроено приложение (потому что он написан до написания приложения). Но у тебя пути автозагрузки прописаны прямо во фреймворке (вроде /app/model), то есть фреймворк как-то заглянул в будущее и угадал, как будет устроено приложение. Неправильно получается.

> переделал давеча автозагрузчик из простого перебора массива путей до компонентов в неймспейсовый и у меня сломался механизм логининга. Всегда активным юзером становится первая запись в базе данных вне зависимости от ввода

Это вообще никак не связано и причина в другом. Натыкай там echo и посмотри, что в какой переменной приходит.

> include_once(ROOT.'/app/components/Database.php');
Зачем это нужно когда есть автозагрузка?

> session_start();
Сессии плохо использовать для логина так как они умирают через полчаса бездействия.

https://github.com/sylenien/students-exercise/blob/master/app/components/Database.php
Зачем нужен этот класс, есдли можно просто написать $pdo = new PDO? Или ты где-то это увидел и бездуимно скопировал? Для чего нужен объект этого класса?

> $this->Connect();
Почему ты вызываешь статический метод через стрелку? И какой смысл вызывать эту функцию если ты никуда не сохраняешь результат?

https://github.com/sylenien/students-exercise/blob/master/app/components/router.php
Имя файла и класса не совпадают в плане регистра букв.

> $controllerName = ucfirst(array_shift($parts).'Controller');
По моему выгоднее писать в конфиге имя контроллера целиком, так как в этом случае его можно найти поиском.

> $controllerFile = ROOT.'/controller/'.$controllerName.'.php';
Почему не автозагрузка?

https://github.com/sylenien/students-exercise/blob/master/app/components/router.php
зачем в роутер прописывать путь к конфигу? Логично убрать у класса ответственность за поиск и загрузку конфига, и передавать конфиг снаружи. да и вообще почему настройки роутинга должны браться именно из отдельного php-файла?

То же касается обращения к $_SERVER. Как тестировать твой роутер, если он сам берет URL? Как ему передать произвольнй УРЛ?

По моему ты опять скопировал откуда-то код не думая.

Метод run() написан неправильно, так как не написано, что делать если ни один маршрут не совпал с URL. Надо выдавать 404.

> if (fileexists($controllerFile)) includeonce($controllerFile);
Та же проблема. Если файла нет, ты скрываешь информацию об этом, никак об этом не говоришь, чтобы труднее было найти ошибку. Зачем ты сам себе усложняешь обнаружение ошибок?

https://github.com/sylenien/students-exercise/blob/master/app/model/Student.php
за что отвечает этот класс? Он и с БД работает, и логином занимается?

Ты кладешь в сессию имя и группу студента. А когда их обновят в БД, ты не забудешь обновить их и в сессии?

> for($i=0; $row = $result->fetch(); $i++) {
> $costudents[$i]['id'] = $row['id'];
Тут надо использовать foreach. Более того, все данные можно получить одной строчкой без цикла. Вместо создавания массивов непонятной структуры лучше возвращать массив объектов.

https://github.com/sylenien/students-exercise/blob/master/view/index.php
Вью не должен обращаться к внешним переменным вроде сессии.Ты пока по-старому пишешь все вперемешку.
>> No.47427 Reply
Я специально пишу тут не только ответ, но и вопрос: на случай, если кому-то еще интересно посмотреть код, или дать какой-то дополнительный совет.

----

Вопрос

>>956975 | http://arhivach.org/thread/245785/#956975

Я тут уже всплывал со своим говноблогом, пытаюсь вот его переписать согласно mvc.
В общем, я написал такой контроллер, в нем стартует сессия и инстанцируются общие для всех страниц классы.
https://github.com/honeydev/s-blog/blob/master/app/Controllers/MainController.php

Этот класс наследуют все остальные классы контроллеры. Которые в свою очередь уже запускаются роутером. Все ли я правильно делаю?

Ответ

Думаю. что неправильно. Ну например, почему в контроллере идет работа с какими-то сессиями? это задача сервиса, отвечающего за авторизацию. Также, сессии плохо подходят для авторизации так как удаляются при неактивности в течение некоторого времени, около получаса.

Вообще, мне кажется неправильно в конструкторе заполнять какие-то массивы данными. А вдруг ничего выводиться не будет? зачем их было получать? Лучше в функции render() получать и добавлять эти данные.

Вообще, контроллеру в конструктор обычно передают DI контейнер, из которого он и берет экземпляры сервисов. В уроке про DI написано. Так удобнее, и гарантируется что будет испльзоваться один общий экземпляр сервиса.

В общем, лучше просто ограничиться получением нужных сервисов, а потом уже в render либо их передавать либо данные их них передавать во вью.

> Set assoc array with keys title, author, email
Вместо того, чтобы делать массив, удобнее просто передать сервис и пусть вью берет что ему нужно. Ну или передавать это как отдельные элементы. А ты зачем-то все передаешь через массив. Неудобно же, по твоей логике, надо все методы убрать и оставить только один, возвращающий огромный массив со всеми данными сразу?

Лучше просто сделать getTitle(), getAuthor и так далее.

У сервиса нет задачи выдавать данные специально для вью, а ты явно делаешь метод в сервисе, чтобы быстрее передать данные во вью одним массивом.

https://github.com/honeydev/s-blog/blob/master/app/Services/AdminService.php
Не очень понятно назначение класса.

https://github.com/honeydev/s-blog/blob/master/tests/forsanitize.php
Это тестировать удобнее не наколенными скриптами, а юнит-тестами под phpunit. codeception кстати содержит в себе phpunit.

Все твои сервисы удобно тестировать именно юнит-тестами. Снаружи, через интерфейс, их тестировать будет не удобно.

https://github.com/honeydev/s-blog/blob/master/tests/tests/acceptance/ChangeRegistrationStatusCept.php
Тут много копипасты. Если у тебя есть специальный тестовый аккаунт гораздо логичнее в тестовом хелпере сделать один метод для залогинивания под этим аккаунтом, а не копипастить логин 20 раз по коду.

https://github.com/honeydev/s-blog/blob/master/tests/tests/acceptance/AddPostCept.php#L12
Не уверен, что этот тест реально тестирует появление поста. Ведь увидеть текст поста можно например и если форма заполнена неправильно и она выведется для исправления ошибок.

> $I->see('Hi');
Тоже хлипко так как эти буквы вполне могут быть частью другого слова. То есть на любой случайно взятой странице они вполне могут найтись.

> require_once 'mytestslib.php';
В codeception есть тестовые хелперы, надо сделать нормальный класс, а не городить велосипеды. Там можно сделать класс со статическими методами, а также расширять сам объект $I новыми методами.

В тестах на правильное/неправильно заполнение формы много копипасты, надо от нее избавляться, либо через вспомогательные функции, либо через объединение тестов.

https://github.com/honeydev/s-blog/blob/master/sql_cfg.php
тут какие-то костыли. Почему конфиг перемешан с кодом соединения с БД?

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

https://github.com/honeydev/s-blog/tree/master/vendor
Этой папки не должно быть в репозитории. Как и composer.phar и https://github.com/honeydev/s-blog/blob/master/composer-setup.php

https://github.com/honeydev/s-blog/blob/master/sblog.sql#L66
> ENGINE=MyISAM
Почитай самостоятельно про отличия MyISAM и InnoDB

> userid
Как тут выделить отдельные слова если все написано слитно?

> picuri
Слишком сокращено. Не экономь буквы.

Где внешние ключи в базе?

> CHARSET=latin1;
Почему все только на латиннице? Кирилица не нужна?

Вообще, названия колонок в базе ужасные. К выбору названий надо подходить более тщательно. Почти все имена полей надо переделывать.

> `accesslvl` tinyint(1) NOT NULL DEFAULT '0',
Непонятно что значит эта колонка.

Непонятно чем папка components отличается от app и вообще что такое "компонент"

codeception надо прописать не в require, а в require-dev так как он нужен только разработчику и не нужен для работы сайта.

https://github.com/honeydev/s-blog/blob/master/setup.php
тут дублирование информации из дампа.

https://github.com/honeydev/s-blog/blob/master/public/index.php#L6
> 'display_errors', 1);
Это удобнее прописать в php.ini. Или ты на реальном сайте тоже включишь отображение всех ошибок?

https://github.com/honeydev/s-blog/blob/master/app/Services/UserService.php
тут все очень плохо, советую перечитать все комментарии к задаче про студентов, неохота пересказывать. Используй DI, не подставляй переменыне в SQL запросы, почитай про паттерны работы с SQL.

Также, ты не умеешь пользоваться mysqli. После каждого действия с mysqli надо проверять, не произошло ли ошибки, если да, то сообщать о ней, так как автоматически это не проверяется.

SQL запросы у тебя не собраны в отдельные классы, а размазаны по всему коду.

> public function authorizeFromPost
Все смешано в кучу, ты пока не можешь разделить процесс входа на отдельные независимые действия, а пишешь код вперемешку. Тут и чтение данных из POST, и вызов валидации и обработка исключений и чего только нет. Это не MVC.

Вообще, у тебя пока не ООП, а ты просто взял обычный код где все перемешано в кучу и просто добавил сверху слово class. Идея ООП в том, что каждый класс имеет свою зону ответственности.

Ты не делал нашу задачу про Вектор? Стоит сделать, если не делал. И почитать комментарии к задаче про студентов, там много полезного.
>> No.47428 Reply
Вопрос

http://arhivach.org/thread/245785/#956914

p-sch Аноним 19/03/17 Вск 15:04:01 #962 №956914

Вот я делаю студентов и уткнулся в проблему. Есть bootstrap.php и в нем перехват ошибок/исключений вида http://ideone.com/EkC1Qr . И все было хорошо и лампово, пока я не начал делать скрипты для вызова из консоли, что бы заполнять базу фейками (да я узнал про fzaninotto/faker и уже не мог остановится). В скриптах конечно вывод в консоль, а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Завести глобальную переменную с флагом для консольных скриптов? Сделать отдельный bootstrap для них с другим обработчиком? Как это лучше исправить?

Ответ

Можно проверять через phpsapiname() например.

> fileputcontents(DIR . "/../logs/error.log",
есть стандартный лог ошибок и функция error_log(), не изобретай велосипед.

> а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Вряд ли. В консоли header просто игнориурется, по крайней мере в PHP5.

> require_once "../src/View/503.html";
Тут не указан конкретный путь к файлу. Это относительный путь, а относительно какой папки он указан? Это вообще работать не будет.

> header("HTTP/1.1 503 Service Unavailable", true, $timeout);
Почитай мануал по функции header и что идет 3-м параметром.
>> No.47429 Reply
Вопрос

http://arhivach.org/thread/245785/#956891

Просьба проверить код

Ответ

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/core/Model.php
Зачем нужен этот класс? Никто не говорит что ты обязан наследовать все модели от одного общего класса.

И определись, что ты назваешь моделью. Ты по моему все подряд классы этим словом называешь. Что такое MysqlModel?

Также, у тебя по моему непонимание, что такое наследование. А наследуется от B значит, что А - измененная версия B. Например, Банк это Организция, но с лицензией на банковскую деятельность и дополнительными возможностями, потому Банк можно наследовать от Организации.

У тебя наследуется непонятно что от непонятно чего. Класс для соединения с БД и класс для проверки авторизации наследуются оба от Model. Что у них общего? Ровно ничего, это разные классы для разных задач. Следовательно, наследование тут реализовано неправильно.

Идея с MysqlModel неудачная, так как ты смешиваешь загрузку каких-то конфигов и работу с базой. А зачем, если это можно делать в разных классах и просто передавать в класс для работы с базой уже созданный и настроенный объект PDO? У тебя просто все как-то переусложнено.

$config = loadinifile(...);
$pdo = new PDO(...);

Вот и все. Нет необходмости писать целый класс, чтобы создать объект PDO.

Каждый класс должен заниматься своим делом. Класс не должен одновременно занматься поиском пользователей в БД, валидацией и чтением конфигов.

Далее, почитай комментарии к задаче про студентов, я не хочу тут все пересказывать, в частности, про Dependency Injection. Именно она нужна в AuthModel.

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L82
Эта функция сделана неудачно, надо сделать вместо нее 4 отдельных функции (вроде queryNum(), queryAssoc() и тд) а не объединять функции с разным алгогритмом работы и разным типом возвращаемых значений. Это ненормально, когда одна функция может возвращать значения разных типов и это неудобно.

> запрос к БД
> без понятия зачем тут нужен новый уровень абстракции
Тогда не надо его делать. Ты должен понимать каждую строчку в своем коде. Пиши проще, чтобы все было понятно, не усложняй.

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L70
> } catch (PDOException $e) {
Почитай урок про исключения.

В общем, весь MysqlModel - это надо переписать полностью, так как там все намешано в кучу и непонятно, вообще за что класс отвечает. Также, ты все переусложняешь. Если ты хочешь что-то добавить в PDO то либо унаследуй PDO, либо сделай класс который принимает в конструктор объект PDO и предоставляет какие-то полезные функции.

И если ты не делал ООО Вектор, то советую начать с этой задачи, она помогает изучить основы ООП.
>> No.47430 Reply
Вопрос

http://arhivach.org/thread/245785/#956741
Аноним 19/03/17 Вск 08:05:18 #959 №956741

На постгрес меня хероку заставил перебраться. Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем. Мне кажется, если злоумышленник обойдёт PHP-ограничения, то продублированные регулярки на стороне БД вряд ли чем-то помогут. Про CI прочитал, попробую поднять. Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).

Ну и можно делать файлообменник на Симфони? Там уже много чего настроено из коробки (есть дебаг-панель, cli-утилиты, проще тестировать, чем Silex, есть плагин для PHPStorm, добавляющий автодополнение для сервисов/шаблонов/функций Twig и так далее). Понимаю, что оверхед, но взамен готов делать более сложные задания по файлообменнику.

Просьба проверить:

- скидки http://arhivach.org/thread/245785/#946704 | https://bitbucket.org/learning_acc/discounts/
- http://arhivach.org/thread/245785/#947452 | https://github.com/kubk/students

Ответ

> Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем.
Для защиты базы от наполнения кривыми данными при ошибке разработчика. Ты или твои коллеги, если они есть, можете ошибиться и дополнительные проверки помогут обнаружить эту ошибку, не дадут заполнить базу неправильными данными.

Проверка в форме это другое, так как может быть одно ограничение на значение в базе и другое ограничение на значение, которое позволено ввести через форму. Хотя конечно некоторое дублирование появляется.

> Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).
Хрупкость тестов больше зависит не от их количества, а от того, как они написаны. Подстраивать тесты придется, если меняется логика использования класса, но при таких серьезных изменениях тебе ведь наверняка захочется их протестировоать, и все равно пришлось бы писать или переделывать тесты на этот класс.

Такое бывает, при каких-то больших рефакторингах. Ты переделываешь класс (или вообще заменяешь на другой), потому тебе надо править весь код, работавший с ним, включая тесты.

> Ну и можно делать файлообменник на Симфони?
А не хочешь сделать testhub из ОП поста? Хотя бы частично. Файлообменник на Симфони это стрельба из пушки по воробьям. Там Slim/Silex + Twig + Doctrine лучше подойдет. И так как ты почти все это использовал в студентах, то это по сути будет то же самое и ничему новому не научит. Не думаю, что тебе стоит вообще делать файлообменник. Он предназначен для тех, кто студентов делал без микрофреймворков.

Testhub по сложности близок к реальным проектам.

А еще, в ОП посте есть задание на SPA (никто пока не осилил), если ты хочешь поработать с JS и решал более простые задачи по этой теме.

> Настораживает, что функция автора статьи при epsilon 0.00001 считает, что 1000000 и 1000001 равны: http://floating-point-gui.de/errors/NearlyEqualsTest.java
epsilon это ведь не абсолютная разница, а относительная, относительно сравниваемых чисел. Ну то есть epsilon умножаем на 1000000 чтобы получить абсолютную разницу, получается 10 по моему.

Ну если взять числа побольше, вроде 100000000000000 то на 32-битной системе разницы с числом на единицу больше не будет. Она потеряется в погрешности хранения флоатов. По идее epsilon можно выбирать исходя из этой погрешности хранения флоатов, но тут другой подвох - если сделать несколько операций подряд, то погрешность может суммироваться и превысить epsilon. Потому его выбирают исходя из задачи.

Например, если у тебя сравниваются цены, то точнее копеек сравнивать их не надо. Или если ты обрабатываешь данные по результам измерений напряжения, то опять же нет смысла при сравнении ставить epsilon больше чем погрешность вольтметра. Ведь все приборы имеют какую-то конечную точность.

В общем, смысл такой, что флоат - это неточный формат хранения чисел, он вносит погрешность, из-за нее у нас результат при точном сравнении не сойдется, потому мы должны выбрать порог, меньше которого мы считаем разницу несущественной, а числа примерно равными.

Скидки

Задача про скидки тут: http://www.cyberforum.ru/php-oop/thread1459985.html
Решение анона: https://bitbucket.org/learning_acc/discounts/
Пост анона: http://arhivach.org/thread/245785/#946704
Комментарии:

> Мне кажется есть смысл сделать её неизменяемой, а не надеяться, что пользователь вспомнит вызвать clone (вот я как раз забыл).

Да, можно, неизменяемые классы этим и хороши, но их минус в расходе памяти и времени процессора, если данные часто надо менять и постоянно создавать новые копии. Тут вроде проблемы такой нет.

https://bitbucket.org/learning_acc/discounts/src/be3e1a13fda16af5b5397c94428c4d9b25632d29/src/DiscountResult.php?at=master&fileviewer=file-view-default
> if ($priceWithDiscount < 0) {
> throw new \LogicException(
Вообще для такого случая лучше подходит InvalidArgumentException. Вот тут есть объяснение где используется LogicException: http://stackoverflow.com/questions/5586404/logicexception-vs-runtimeexception/5586510#5586510 и InvalidArgumentException как раз наследуется от него, и уточняет причину ошибки.

Еще один подвох в твоем коде - переменная в конструкторе скидок называется $percent, но она хранит число от 0 до 1. Стоило бы добавить проверку что она в этом диапазоне, так как кто-то может подумать что там именно проценты от 0 до 100. Или использовать там проценты.

> $originalSum = $matchedProducts->calculatePricesSum();
> return new DiscountResult($matchedProducts, $originalSum - $originalSum * $this->percent);
Это так часто встречается, что может стоило сделать в DiscountResult статический конструктор для группы товаров и скидки в N%?

Насчет неизменяемости ProductCollection: там же по-прежнему есть addProduct, какая-то неизменяемость получилась не совсем полноценная.

> $products = clone $this->products;
> $products->detach($product);

> return self::fromSplObjectStorage($products);
Тут в fromSplObjectStorage происходит лишнее копирование объекта Spl, тоже не очень удачно. Лучше наверно обойтись без addAll().

Но это все мелкие советы по улучшению, так-то задача хорошо решена.
>> No.47431 Reply
Вопрос

Просьба проверить код, пост анона http://arhivach.org/thread/245785/#947452

Ответ

Не знаю, заметил ли ты, но при добавлении CI около коммита появляется галочка, если тесты пройдены успешно: https://github.com/kubk/students/commits/master , причем клик по ней ведет на подробности. Сразу видно, если кто-то сломал код.

Также, галочка ставится для отдельных веток: https://github.com/php/php-src/branches

Ну и если например кто-то делает пулл-реквест с предложением изменений, то опять же, прогоняются тесты и пишется, не сломались ли тесты, как тут: https://github.com/php/php-src/pull/2427

Это помогает при командной разработке, особенно в больших опен-сурс проектах.

https://github.com/kubk/students/blob/master/tests/StudentGatewayTest.php#L97
> public function searchProvider()
Я тут еще подумал, что можно было проверять не найденные id, а найденные имена/фамилии - тогда данные для теста выглядели бы более наглядно. Хотя и id можно использовать, там все равно нужны тестовые данные.

> > - передаем строку с тегом и проверяем, что на выходе тега нет
> > - вызываем htmlentitydecode на результате и проверяем, что получилась исходная строка
> Если правильно понимаю, то второй пункт работает, только если искомая строка не будет найдена. В противном случае результат будет содержать тег b или mark, и исходную строку от такого результата не получим
Я имел в виду под htmlentitydecode еще и вырезание тегов наверно. Но это все равно не универсально, так как например найденное слово может выделяться не только тегами,а например добавлением каких-нибудь скобок. Совсем универсально тест тут не написать, получается.

Вообще, эта функция возвращает результат, ориентированный на восприятие человеком, и соответственно наши тесты становятся зависимыми от того, как именно там оформляется выводимый тест. Ничего не поделать.

> Теперь html в php нет https://github.com/kubk/students/blob/master/src/LinkGenerator.php#L47
> , но как мне кажется, тут https://github.com/kubk/students/blob/master/templates/student-list.twig#L14+L15
> какой-то низкоуровневый код в шаблоне. Ну и ссылка генерируется только в одном месте, нужен ли макрос, который будет использоваться лишь один раз?
Теперь не нужен.

https://github.com/kubk/students/blob/master/scripts/publish-frontend.sh#L3
> mkdir public/vendor public/vendor/{css,js}
Тут стоит добавить флаг на случай если папка существует. Также, в bash-скриптах полезно ставить в начало set -e чтобы при первой ошибке скрипт завершался. Иначе он будет продолжать работать все равно.

Также, в тестах удобно использовать контейнер для получения сервисов, если только тебе не требуется создать его с какими-то нестандартными параметрами.

https://boiling-brook-29265.herokuapp.com/form
Пол лучше делать радиокнопками, так как в них все опции видны и доступны сразу, без лишних кликов. Выпадающий список используют, чтобы сэкономить площадь ценой более сложного доступа к опциям, но для 2 пунктов там экнономить особо нечего.

И смесь английских подписей к форме и русских слов в интерфейсе не очень логично смотрится.

> https://boiling-brook-29265.herokuapp.com/?notify=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%21
Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису. Если бы это было в популярном сервисе вроде вконтакте - это однозначно была бы уязвимость и наверняка как-то использовалось бы.

https://github.com/kubk/students/blob/master/src/StudentGateway.php#L14
> private $table = 'students';
Тут ты вынес название таблицы, но зачем? Менять ты его вряд ли будешь, и скорее всего в итоге просто будет менее удобно искать где она используется, а также читать SQL запросы.

> public function studentsAreTheSame(Student $studentA, Student $studentB): bool
Возможно, эту функции логичнее поместить в Student. Вроде $a->isSame($b) или Student::areSame(). Второй вариант позволяет принимть null.

Насчет PageObject, да, у тебя они довольно удобно сделаны.

https://github.com/kubk/students/blob/master/tests/ControllerTest.php#L41
> $this->assertTrue($client->getResponse()->isRedirect());
Вот эта проверка, что мы залогинились, мне кажется, не очень точная. Если бы мы писали сценарий для тестера-человека, мы бы вряд ли писали там "проверить, что произошел редирект".

Лучше бы проверять наличие признака залогиненности, обычно ведь для залогиненных пользователей там что-то выводится в углу. да хотя бы кнопку разлогинивания. Если такого нет, в принципе, можно даже сделать служебный URL, проверяющий залогиненность.

А после разлогинивания - соответственно проверить пропадение этого признака.

Так, вообще, задача хорошо сделана, думаю, что это такой образцовый пример решения задачи про студентов. Тебе надо дальше делать что-нибудь посложнее, точно не файлообменник.
>> No.47432 Reply
Вопрос

Задание про игру сапер с использованием MVC
Код: https://github.com/greenTea242/MinesweeperMVC
Пост: http://arhivach.org/thread/245785/#945676

Ответ

> if (typeof strCell != "string") {
> throw new ConsoleGameControllerException("Неправильный тип аргумента strCell. Ожидается" +

Не помню, говорил я или нет, для таких проверок удобно сделать функцию вроде assert или даже целый набор таких функций:

assert(typeof strCell == "string");
Assert.hasType(strCell, "string");
Assert.notEmpty(x);

Так и компактнее, и читабельнее. И может быть есть готовые библиотеки.

> new ConsoleGameControllerException
Для такого случая, если совсем строго смотреть, логично исплоьзовать что-то вроде InvalidArgumentException, или TypeError, который вроде бы уже есть в яваскрипте. То есть это исключение не привязано к конкретному контроллеру. Потому что это ошибка в написании кода в общем, а не специфичная для этого контроллера ошибка.

> } catch(error) {
> console.log(error.name + ":" + error.message);
Ты зря это делаешь, так как консоль по умолчанию выводит непойманные исключения, да еще со ссылками на код и стектрейсом, а в твоем случае данных меньше.

Еще, у тебя вид открытых клеточек и неоткрытых клеточек почти однаковый, различаются только яркостью, я пару раз путался. Или в оригинале так же?

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/controllers/DomGameController.js#L103
> DomGameController.prototype._setEvents = function() {
Вот эта функция должна быть в view, а не в controller, так как это вью знает на что он должен подписываться в DOM, а контролллер это знать не должен. То есть это стоило перенести во вью.

> DomGameView.prototype._createDevTools = function() {
> DomGameView.prototype._createHeader = function() {
Вот эти функции, которые по кусочкам создают интерфейс, можно было бы обойтись без них, если бы у нас был нормальный шаблонизатор, который умеет инклудить подшаблоны. Им можно было бы и поле создать.

> DomGameView.USERTOOLSOPTION_1 = "1";
> DomGameView.DEVTOOLSOPTION_1 = "1";
Есть риск что эти константы где-то перепутаются, так как у них одинаковое значение. Лучше делать разное.

> DomGameView.prototype._setGame = function(game) {
Не уверен что эта функция так уж нужна, может проще было в конструкторе написать this._game = ... ? Но так, ошибки конечно нет, вдруг когда-нибудь понадобится подменять модель на другую.

> this._field.querySelector("td[data-x=" + x + "][data-y= " + y + "]");
Быстрее наверно было бы использовать словарь со ссылками на нужную ячейку, чем запускать поиск по DOM перебором всех ячеек. Хотя на маленьких полях разница вряд ли будет заметна.

В событии DomGameViewEvent.POPUP_CREATED возможно имело смысл передавать ссылку на попап как параметр события.

> for (var i = 0; i < classList.length; i++) {
> div.classList.add(classList[i]);

А можно так: x.className = classList.join(' ');

> var keys = Object.keys(dataAttr);
> for (i = 0; i < keys.length; i++) {

А можно for (key in dataAttr). Что-то ты основы JS подзабыл.

> Util.repeatString
раз уж ты используешь ES5 (Array.isArray), там есть функция и для повтора строк.

> CellSet.prototype.hasCell
> return this._parentContainer[y][x] !== undefined;
Для проверки ключа в словаре есть оператор in, его логичнее использовать. так например

return y in this.pc && x in this.pc[y];

или

return !!(this.pc[y] && this.pc[y][x]);

!! - приведение к boolean

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/models/CellSet.js
Тут у тебя в нескольких функция скопипащен вложенный цикл по клеточкам. Возможно, стоило его вынести в функцию или использовать forEach.

parentContainer лучше было назвать cells.

Еще, у тебя там в модели есть куча проверок, что разные cellSet не равны null. может было проще в конструкторе создать эти CellSet, а при рестарте игры просто их очищать, например вызовом метода clear(). Тогда просто код был бы чуть проще, так как это поле не могло бы быть пустым.

Еще, теоретически можно было сделать эти CellSet генераторами событий изменения клеточек и числа флагов, чтобы гарантировать что мы не упустили ничего. Но это могло бы и усложнить код.

В общем, я думаю, сделана игра хорошо. Вью конечно получился немного большим по объему, там много ручной работы с DOM. Но зато интерфейс достоверно воспроизведен, включая иконку с рожицей.

Советую дальше изучать Knockout, Anlular 2 или React. В первых 2 проблема рутинного кода работы с DOM решается через data binding, в последнем через перерендеринг страницы.

Сделать на них можно какую-нибудь форму с валидацией или страницу конфигурации чего-нибудь (вроде сборки заказа с разными параметрами). Или какой-нибудь мессенджер (это вроде модно сейчас в стартап-среде). Или можешь посмотреть на задание на SPA в ОП посте и попробовать кусочек из него сделать. Никто пока не осилил.
>> No.47433 Reply
>>47432
Норкоман штоле?
>> No.47435 Reply
>>47432
Весело у вас там, а за что зобанили?
>> No.47438 Reply
>>47435
Скорее всего по ключевым словам или по ошибке:

> Ошибка постинга: Постинг запрещён. Бан: 701768. Причина: Общее 9 - Вайп, спам, обход спам-листа

В /d/ тоже никто ничего не отвечает.
>> No.47439 Reply
>>47431
>>47430
Спасибо большое за ответы!

> Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису.
Исправил так: https://github.com/kubk/students/commit/1e649bacaf548c63471862be726c81dfcaae49b6
Правда, строки "edited" и "registered" нигде не документированы.

По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

> А не хочешь сделать testhub из ОП поста? Хотя бы частично.
Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.
Например, мне нравится лёгкость использования наследования в Доктрине, можно ли использовать наследование вместо объекта MediaInfo? Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть. Есть ли смысл тут использовать Class Table Inheritance? Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов. Для пользователей планирую использовать Single Table Inheritance.
>> No.47440 Reply
>>47439
> Правда, строки "edited" и "registered" нигде не документированы.

Можно сделать класс, например Notification, и в нем константы NOTIFY_EDITED и тд.

> Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.

Можно делать последовательно или параллельно с тестхабом. Ну не знаю, ты конечно можешь сделать, я-то не против.

> Например, мне нравится лёгкость использования наследования в Доктрине
Я бы настороженно к наследованию относился, там из-за наследования могут быть не очень эффективные запросы в некоторых случаях (ну это конечно надо смотреть).

> Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть.
Я думаю, тут выгоднее вместо наследования просто сделать для MediaInfo хранение JSON-данных в колонке. В сущности хранить объект MediaInfo. А в Доктрине настроить автоматическое конвертирование MediaInfo в JSON-данные при загрузке/записи в БД.

Тут просто проблема в том что у медиаданных может быть много разных свойств, в зависимости от формата файла (попробуй сам посмотреть дампы данных в демо getId3: http://www.getid3.org/demo/ ). В таких ситуациях, сложно и неудобно реализовывать наследование и гигантские таблицы с 50 полями. Тут проще использовать либо EAV (Entity–attribute–value) либо, как я написал, сериализацию (кодирование в виде строки) данных с помощью JSON.

Наследование пригодится в тестхабе, для разных типов вопросов и ответов.

> По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

Так как это только для тестов, то можно возвращать что угодно, я бы использовал либо ответ в виде текста 0/1 либо в виде JSON, с его помощью можно передать много данных.

> Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов.

Джойны нужны, но не так много:

SELECT FROM base LEFT JOIN class1 ON ... LEFT JOIN class2 ON ... LEFT JOIN class3 ON ...

Для Concrete TI можно сделать N выборок, объединенных в UNION:

SELECT FROM class1
UNION
SELECT FROM class2
UNION
...

Вообще, у 3 подходов к наследованию есть свои сильные и слабые стороны, и надо их изучить. Ну например, у Concrete TI трудно обеспечить уникальность id в нескольких таблицах (в БД вроде Postgres, где генератор id - отдельная от таблицы сущность, это возможно), нельзя сделать внешний ключ на сущность не из одной конкретной таблицы. Где-то выборки становятся сложнее, и тд.
>> No.47740 Reply
Есть одна библиотека, которая требует РНР 5.6. На хостинге установлен РНР 5.4, возможности обновить нету. Насколько сильно отличается РНР 5.4 от РНР 5.6? Будет ли библиотека работать на РНР 5.4?
>> No.47742 Reply
>> No.47743 Reply
>>47742
Тогда лучше использовать устаревшую ветку библиотеки, которая под 5.2 implying, что заявления авторов гарантируют полную работоспособность
>> No.47744 Reply
>>47743
Ну, если библиотека имеет нулевое покрытие юнит-тестами, то наверное да, так лучше. А что за либа то?
>> No.47749 Reply
>>47744
Я об этих библиотеках:
PHPExcel - старая версия (https://github.com/PHPOffice/PHPExcel)
PHPSpreadsheet - новый вариант (https://github.com/PHPOffice/PhpSpreadsheet).
Пользоваться юнит-тестами не умею
>> No.47750 Reply
>>47749
Кончено лучше было бы найти хостинг с пхп 5.6 (которому жить уже недолго) или 7, но так тоже пойдет.
>> No.47766 Reply
>>47740
Отличия на уровне синтаксиса, весьма существенные. Либа может вообще не запуститься, так как там попадётся новый синтаксис и парсер php просто упадёт на нём. Кое-где могут быть отличия, которые приведут к разному поведению в одном и том же коде, тогда код может работать, но неправильно. Короче говоря, надеяться не на что. Не запашет. Вообще.
>> No.47788 Reply
>>47766
2spooky4me
>> No.47789 Reply
>>47766
Вряд ли достаточно старый проект рефакторится с каждой версией похапе, и вряд ли разработчики прямо подхватывают все новые фичи. Так что шансы есть.
>> No.47790 Reply
Какой объем данных легально хранить в $_SESSION? Хочу хранить там массив из сотни строк, например. Так можно?
>> No.47791 Reply
>>47790
Вроде по умолчанию данные сессии хранятся в сериализованном виде в файлах, так что можешь дофига туда поназаписовать.
>> No.47792 Reply
>>47789
Многие подхватывают новые фичи быстро. Я уверен, писать два вопросика вместо грамоздких isset понравилось всем. И сразу. Они бы не писали более новую версию в требованиях, если бы не были причины для этого. Чтобы всё сломать много не надо, одна строчка и всё. Шансы конечно есть. Но блин, это прога на пыхе. Они часто радуют даже, когда всё делаешь правильно, а если ещё и версия не та, то можно ждать удар в спину в любой момент.
>> No.48039 Reply
Анон, что разбирается в PHP и PDO в частности, будь добр, помоги неофиту.
https://pastebin.com/ZYZWSbce
Исключение выбивает, а почему - непонятно. То ли с самим пдо наворотил, то ли с подключением к MySQL проблемы.
>> No.48040 Reply
>>48039
Код у тебя жутковатый, вот эта вся мешанина из ифов и трай-кетчей очень всё запутывает. Декомпозиция нужна. MVC мать её так.
>> No.48041 Reply
>>48040
Тащемта, уборкой кода я займусь позже. Главное, чтобы заработало. Тем более, что нужно будет включать код отсюда в другой проект.
UPD. Сволочь к MySQL подключаться не хочет. Выбивает, что:
`SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)`
>> No.48042 Reply
>>48039
Какие у вас else!..
>>48040
> Декомпозиция
> MVC
1 Инициализируем службу сообщений.
2 Шлем письмо контроллеру, мол, глянь, чо там (фактически, это письмо из ниоткуда, т.е. без обратного адреса).
3 Контроллер убеждается, что там чёто, что он понимает, и:
3.1 шлёт письмо валидатору, проверь, мол, чо там с тем-то и тем-то;
3.1.1 Валидатор проверяет то-то и то-то и отсылает контроллеру ответ.
3.1.2 Контроллер смотрит ответ и:
3.1.2.1 если то-то и то-то валидно, шлёт модели письмо, мол, это тебе;
3.1.2.1.1 Модель делает чёто с тем-то и тем-то в базе и глобальными переменными и наконец шлёт письмо представлению, мол покажи то-то.
3.1.2.2 шлёт письмо представлению, мол, покажи, что невалидно то-то.
3.2 шлёт письмо представлению, мол, покажи, что хз, чо это.
4 Представление начинает отображать чёто.
5 По завершению работы представление шлёт контроллеру письмо о сём факте.
6 Контроллер шлёт службе сообщений письмо, мол, я кончил.
7 Поскольку тут вам не FastCGI приложение, служба сообщений завершает работу.
8 Конец.
>> No.48043 Reply
File: 2bf07c840afae6312fcc8236cc5e06ab.jpg
Jpg, 480.32 KB, 1400×1409 - Click the image to expand
edit Find source with google Find source with iqdb
2bf07c840afae6312fcc8236cc5e06ab.jpg
>>48042
Ах, да! Quiz: How many virtual machines you found in this little sketch?
>> No.48070 Reply
>>48043
None of them.
>> No.48071 Reply
>>48070
Lol, wrong. What do you imagine when see “virtual machine”? Jvm? Too bad.
In general, virtual machine is a software implementation of non-deterministic final state machine created for solving some spectrum of problem in given domain. In other words, virtual machine is an performer's abstraction. The simplest example is a LOGO turtle — abstract performer that takes an arbitrary sequence of strictly limited numbers of commands from their input and performs strictly limited numbers of operations in accordance with their current state and readed commands.
If we now introduce a MessageService, we'll be able to decompose our system into ControlCenter and MissileLauncher... oops!.. TurtleThePerformer subsystems communicated by sending messages to each other via MessageService and develop them independently. An other advantage of this approach is that we'll be able to simple introduce a LogService as a independent part of a MessageService to store all history of communications, so we always know who gave the death order. If we go even further, we may think that a working area of TurtleThePerformer is a independent entity, so we'll introduce a Working_Area abstraction which in fact is another abstract performer and comminicates with others performers in a standard manner.
Note that when we decided to separate WorkingArea we deprived TurtleThePerformer of the opportunity to see where it go, so now on every step TurtleThePerformer must ask WorkingArea about possibility of moving.
>> No.49011 Reply
File: plsdontbeat.png
Png, 15.99 KB, 749×145
edit Find source with google Find source with iqdb
plsdontbeat.png
File: 123.png
Png, 39.20 KB, 742×381
edit Find source with google Find source with iqdb
123.png

>>47425
Прости за такую ужасную тупость, но что я не так написал? Всё же как и в образце и в мануале на пхп.нет, что не так?
>> No.49028 Reply
File: gothic-2018-07-21-20-04-49-56.jpg
Jpg, 198.52 KB, 1600×1024 - Click the image to expand
edit Find source with google Find source with iqdb
gothic-2018-07-21-20-04-49-56.jpg
>> No.49335 Reply
>>49011
Немного запоздалый ответ, но вдруг кто наткнется на ту же проблему? У тебя там знак "плюс" в первой строке лишний, после <?php.
>> No.50148 Reply
File: Hakase-_Roll-anime-32552527-500-282.gif
Gif, 239.41 KB, 500×282 - Click the image to expand
edit Find source with google Find source with iqdb
Hakase-_Roll-anime-32552527-500-282.gif


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]