«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/11/11 10:19:57  №1293491 1
Когда можно начинать выкладывать свой говнокод? У меня нет никаких практических реализаций работающих сайтов, но есть решения небольших задачек.
Возможно, мне хотелось бы, чтобы анон заценил и ткунл меня носом в говно. Так вот, где публиковать, что читать по этому поводу, есть ли вобще в этом смысл? Краем уха слышал про гитхаб.
Ответы: >>1293500 >>1308856
Аноним 2018/11/16 16:34:38  №1296391 2
Анончики, нужда для облегчения работы цикличных действий приспичила и решил я по изучать работу с API с помощью JavaScript, и сразу же проглотил немытого хуя.

Как оказалось, работать с ним без серверного языка можно только с того же домена, на котором ты и исполняешь скрипт, то есть чтобы JS получил данные с внешнего домена, нужно чтобы на этом домене было прописано разрешение в заголовке для таких работ, но хуй там. Все костыли что я опробовал не работают, все выдают No 'Access-Control-Allow-Origin' header is present on the requested resource.

И тут меня осенило, я же могу не ебаться с серверами и их арендой, а запустить сервер прямо у себя на пекарне и с помощью животворящего PHP сделать проксирование всего этого дерьма, отсюда вопрос, как это сделать?

Знаю что для начала мне нужно будет прописать в самом коде <?php header('Access-Control-Allow-Origin: *'); ?> чтобы таки разрешить к нему доступ из вне, теперь я не пойму как организовать проксирование.

Например ссылка на API http://site.ru/api.json?token=224&user=1488 я создаю на локальном сервере файл proxy.php и обращаюсь к нему с нужного мне сайта из JavaScript с помощью XMLHttpRequest() например так http://localhost/proxy.php?token=224&user=1488 и он возвращает мне JSON с выше указанного API, подскажите пожалуйста как такой костыль реализовать, это у меня будет как-бы такой локальный JavaScript помощник для парсинга APIда благословит вас аллах

Ну или подскажите как таки наебать ограничение Cross-Origin Read Blocking (CORB) в браузере
Ответы: >>1296411 >>1296437 >>1297084
Аноним 2018/11/18 07:31:36  №1297070 3
image.png (169, 482x358)
358x482
Ответы: >>1297487
Аноним 2018/11/18 08:38:20  №1297084 4
>>1296391
>И тут меня осенило, я же могу не ебаться с серверами и их арендой, а запустить сервер прямо у себя на пекарне
Поехавший. Если в кратце - затея хуйня.
Купи себе вдс за 3 доллара и не еби мозги
Ответы: >>1297146
Аноним 2018/11/18 08:49:18  №1297089 5
Screenshot111.png (11, 627x299)
299x627
Screenshot112.png (23, 811x496)
496x811
Screenshot113.png (7, 490x213)
213x490
Насколько я конченый?
Я придумал унаследоваться от ArrayObject'а и прикрутить ему в конструктор проверку типа элементов передаваемого ему массива.
А сам тип задается в дочернем классе.

Таким образом, у меня происходит реальный контроль типа и я точно знаю, что в MessageArray будут только объекты Message.
Я могу задать тайпхинт возвращаемого значения : MessageArray и в принимающем методе быть уверенным, что в том, что мне прилетело будет то, что надо.

Но теперь другая беда. IDE не ебет, что у меня в этом месседж аррее будут только объекты Message.
При итерации через foreach() показывается какое-то говно, а не содержимое класса Message.
Что делать?
То есть, вопрос чисто про подсветку в IDE.
Ответы: >>1297104 >>1297487
Аноним 2018/11/18 10:19:52  №1297146 6
>>1297084
Нахуя что-то покупать и ебаться с его настройкой, если можно запустить трёхстрочный код проксирования локально?
Ответы: >>1297487
Аноним 2018/11/18 23:50:59  №1297487 7
>>1297146

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

>>1297089

Проблема с ArrayObject в том, что данные в него можно передать не только через конструктор, но и через методы. А ставя в них ограничения, ты нарушаешь принцип Лисков.

Потому ArrayObject надо оборачивать:

class MessagesList implements ArrayAccess, ...
{
private $list;

...
$list = new ArrayObject(...);
...
}

Твоя задача решается дженериками, которых в PHP нету. Как безвыходный вариант, можно использовать идею с абстрактным методом (можно сделать не getType(), а supports(object $x)), но тогда придется отказаться от тайп-хинтов.

> То есть, вопрос чисто про подсветку в IDE.

Используй doc-комментарий @var: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207025175-Using-to-phpdoc-to-specify-that-a-variable-represents-an-object-class

>>1297070

Переменным надо давать осмысленные имена. Да, это не очень просто, но никто не обещал, что будет легко.

> [а-яё0-9a-z,.?!:;]+
Ты хотел написать "любой символ, кроме пробела"? Тогда надо использовать \\S

> $hui = preg_replace($regexp,"$1$3$5",$hui);
> $hui = preg_replace($regexp,"$1$3$5",$hui);
Почему повторяется 2 раза? Нужен как минимум комментарий.

> $l++;
> if (($letter==".")|($letter=="?")|($letter=="!")) {
> $letters[$l]=mb_strtoupper($letters[$l]);
Здесь есть риск, что элемента $l + 1 может не существовать. Лучше сделать переменную "предыдущий символ", и проверять ее.

А еще лучше - использовать preg_replace_callback.

Расстановку пробелов - нельзя ли было сделать там же, где и удаление пробелов?
Ответы: >>1297532 >>1297540 >>1298000
Аноним 2018/11/19 05:55:30  №1297532 8
>>1297487
>Проблема с ArrayObject в том, что данные в него можно передать не только через конструктор, но и через методы.
Фигасе, о том, что туда данные можно и через методы передать я и забыл.
Таким образом может существовать объект, в котором будут данные другого типа.
>А ставя в них ограничения, ты нарушаешь принцип Лисков.
Это да. Даже не думал об этом. Код, работающий с ArrayObject, будет ожидать, что сможет нормально работать и с его потомком, а это не так.
Короче не нужно в потомке ломать обратную совместимость с базовым классом.
>Потому ArrayObject надо оборачивать:
То бишь, самому реализовать все нужные интерфейсы?
Ответы: >>1308856
Аноним 2018/11/19 22:19:47  №1297952 9
Анончики, требуется помощь с задачей ОПа.
>Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — правильный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).

ссылка на саму базу телефонов - https://regex101.com/r/qF7vT8/3
Что я накрутил - ([\s\-()]\+7|8)([\s\-()][0-9]){10}$. Не ищет номер с пробелом между + и 7. Очевидным решение будет написать \s* между ними и тогда всё заработает, но сомневаюсь, что это правильное решение.
Буду очень благодарен.
Ответы: >>1297979 >>1297995 >>1308856
Аноним 2018/12/10 00:48:01  №1308856 10
>>1297952

> Анончики, требуется помощь с задачей ОПа.
> Что я накрутил - ([\s\-()]\+7|8)([\s\-()][0-9]){10}$. Не ищет номер с пробелом между + и 7. Очевидным решение будет написать \s* между ними и тогда всё заработает, но сомневаюсь, что это правильное решение

Вообще-то это будет правильным решением. Если между ними может быть пробел, надо так и написать. Так, регулярка верная.

>>1297532

>>Потому ArrayObject надо оборачивать:
> То бишь, самому реализовать все нужные интерфейсы?
Да. Ты создаешь свой класс, не унаследованный от ArrayObject, и не обязан сохранять совместимость с ним.

>>1293491

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

Если ты хочешь критику, ты можешь в этот тред выкладывать, может кто-то прокомментирует, или поискать, может есть какие-то форумы, где можно обсудить код. На SO есть https://codereview.stackexchange.com/ , но он на английском - может есть русская версия?