LINUX.ORG.RU

Пыхотред

 


1

5

А чего это у нас, в нашем загончике, нет закрепленного пыхотреда?

Вот теперь есть(надеюсь, его закрепят).

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

В тред приглашаются все пыхобоги, пыходемоны, пыхофрилансеры, простые пыхари, и даже пыхоненавистники.

Обсудить есть много чего, начиная с различий версий, особенностей языка, CMS-ок, фреймворков, и заканчивая говнокодом.

<?php

Ответ на: комментарий от Deleted

Нормальыне языки, включая C++:

#include <iostream>
using namespace std;
 
int x = 42;
 
int main() {
  std::cout << x << std::endl; // выведет 42
}

Языки для быдлокодеров-колхозников:

<?php
 
$x = 42;
 
function foo() {
  echo($x); // PHP Notice:  Undefined variable: x in /home...
}
 
foo();
tz4678 ()
Ответ на: комментарий от tz4678

Нормальыне языки, включая C++:

Речь ведь шла про калбэки и замыкания (слово use в пыхе). А ты мне какую-то дичь приводишь, не имеющую отношения к теме.

sort(begin(v), end(v), [&count](vector<int>::value_type &a, vector<int>::value_type &b) {
    ++count;
    return a < b;
});
Deleted ()
Ответ на: комментарий от Deleted

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

tz4678 ()
Ответ на: комментарий от tz4678

Языки для быдлокодеров-колхозников

Прикол в том, что функции в PHP не зависят от контекста, иначе можно получить спагетти в 10й степени.

Но ведь, если очень хочется, то можно:

<?php
 
$x = 42;
 
function foo() {
  global $x;
  echo($x); // PHP Notice:  Undefined variable: x in /home...
}
 
foo();

Хотя за такое убивают.

fman2 ()
Последнее исправление: fman2 (всего исправлений: 1)
Ответ на: комментарий от tz4678

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

tz4678 ()
Ответ на: комментарий от tz4678

Да никто вам ничего не пытается доказать. В любом языке есть свои слабые и сильные стороны. А еще в PHP можно сложить число со строкой и вкусить другие «прелести» отсутствия строгой типизации.

Нужно просто знать, где «подстелить соломку», чтобы мягче было падать.

fman2 ()
Ответ на: комментарий от tz4678

напечатает два раза bar.

Для именованных функций область видимость - неймспейс.

нормально ли такое поведение с точки зрения других языков - нет

В лиспе defun точно такой-же. Потому что есть явные неймспейсы/модули и нет нужды городить лишнюю сущность - неявные неймспейсы задаваемые функциями.

no-such-file ★★★★★ ()
Ответ на: комментарий от svinarenko

Скобку закой, придурок. Тут тебе не APL.

Вообще-то, не принято. Потому что после скобки могут затесаться лишние символы (пробелы, переносы строк, etc.), которые попадут в output - а это зачастую не нужно чревато.

Deleted ()
Ответ на: комментарий от Deleted

могут затесаться

Так ты не затёсывай. Как раз в соседнем треде перетираю тут с nix-фанатикем, свято убеждённей, что конвенция заканчивать файл EOL, ибо все строки должны заканчиваться на EOL, менее вредительская, чем прерывание текстовых файлов на EOF в DOS.

svinarenko ()
Ответ на: комментарий от svinarenko

Так ты не затёсывай.

Зачем мне этим запариваться, если я могу тупо не ставить закрывающую скобку - всё будет гарантированно хорошо в этом плане?

Deleted ()
Ответ на: комментарий от fman2

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

iluha16 ()
Ответ на: комментарий от tz4678

Языки для быдлокодеров-колхозников

это как раз таки защита от дурака, пробрасывать контекст в функцию надо явно и это правильно, а то быдлокодер словит ещё больше проблем в своём файле на 1500+ строк с кучей одинаково названных переменных. Приучает писать чистые функции если пригрозить за global смертной казнью, а use запретить для всего кроме анонимок.

Это не удобно кода ты пытаешься в анонимные функции и функции высших порядков (особенно когда писал на JS например перед этим), но напишешь явно use не обломишься - зато безопасно. И там чет был пропозал в новых версиях на упрощенный синтаксис анонимок и захват контекста, но ещё не приняли.

А про неймспецсы тебе уже написали.

Noob_Linux ★★★ ()
Ответ на: комментарий от iluha16

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

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

какой класс, мне положим $db нужно почти в каждой ф-ции для связи с базой и соответственно в каждой ф-ции global $db. и кстати от phpшного оопа мне почему то блевать хочется всегда.

iluha16 ()
Ответ на: комментарий от no-such-file

как бы ты сделал? какой то супер навороченный класс выжирающий гигабайт памяти в котором через 100 промежуточных методов и наследованных классов поступает наконец то запрос в базу?

iluha16 ()
Ответ на: комментарий от iluha16

Тебе ж сказали как закостылить.

class Db {
  public static get() {
    global $db;
    return $db;
  }
}
...
function foo() {
  Db::get()
}
Чувак, ну вообще синглтоны ради этого придумали, и успели закопать в пользу DI. А ты всё как при царе Горохе global пихаешь.

no-such-file ★★★★★ ()
Ответ на: комментарий от iluha16

какой класс, мне положим $db нужно почти в каждой ф-ции для связи с базой и соответственно в каждой ф-ции global $db. и кстати от phpшного оопа мне почему то блевать хочется всегда.

Это всё очень здорово до того момента, как в твоём проекте появятся, например, юнит тесты, в которых тебе вместо базы ножно будет подставить заглушку, возвращающую нужные значения. А у тебя, внезапно, объект базы глобальный и к той самой базе прибит гвоздями.

beaver ()
Ответ на: комментарий от beaver

и что мешает присвоить другое значение глобальной переменной $db = new mysqli(...) определённой в одном файле config.php? нет плять надо лепить какие то запутанные классы тонны говнокода выжирающего память.

iluha16 ()
Ответ на: комментарий от iluha16

и что мешает присвоить другое значение глобальной переменной $db = new mysqli(...) определённой в одном файле config.php? нет плять надо лепить какие то запутанные классы тонны говнокода выжирающего память.

Я погуглил за тебя: https://tproger.ru/translations/singleton-pitfalls/

beaver ()
Ответ на: комментарий от beaver

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

А этот — «хочу глобалы, не хочу ооп» — посади его, кукаретика на сишечку кодить, он в трёх указателях запутается и всё похерит.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

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

И что? Дефицит разработчиков.

beaver ()
Ответ на: комментарий от deep-purple

а мне нравится выхлоп обфускаторов. в моем однострочнике все понятно: $key, $value, $data и действий всего два: объявление статической переменной и возвращение результата тернарного оператора (хотя присваивание в тернарном операторе - это уже javascript наследие, а односимвольные имена переменных python-style).

tz4678 ()
Ответ на: комментарий от anonymous

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

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

тестов в вашем понимании

А, сударь еще и телепат, оказывается. Ожидаемо.

в проде на хайлоаде

Это ты так романтично свой VPS называешь? :)

Мой код

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

anonymous ()
Ответ на: комментарий от anonymous

телепат

Конечно, обкладывать тестами места типа «как отработал вызов херни при передаче вот такого аргумента» — это пздц. Оно как-бы сразу воняет недоверием к автору внутренностей тестируемого чёрного ящика и заранее предполагает его некомпетентность.

романтично свой VPS называешь?

Не свой, с 10гбит каналом забитым почти под завязку.

Маленькая поделка, одним человеком

Не маленькая, не одним.

пусть под себя неясные моменты переписывает

Зачем? Там всё по полочкам разложено, есть документация.

Вдруг когда в нормальную работу

Хлебни смузи ещё разок и успокойся.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Хлебни смузи ещё разок и успокойся.

В заметку - автоматические тесты и потребность программистов в них почти наверняка более стары чем ты сам. Просвещайся: http://www.testingreferences.com/testinghistory.php

Зачем? Там всё по полочкам разложено, есть документация.

Живая документация и тесты идет нога в ногу. Конечно, можно научить человека «ни строки изменения кода без изменения спецификации!», но даже тогда без автоматических тестов поддерживать документацию в должном уровне - очень сложно.

Оно как-бы сразу воняет недоверием к автору

Наоборот, это пахнет здоровым органическим подходом к созданию продукта. Код в тестах взаимосвязан с тестируемым кодом, что в разы повышает его надежность, читабельность, легкость изменения и, само собой, проверку, что он работает, как задумано. Код без тестов против кода с тестами, это как РНК против ДНК - жалкое зрелище, уровень низшего существования (полу-)жизни. Научится писать тесты это тоже самое как успешно бросить курить - назад в вонь вернутся можно, но уже не захочешь. :)

anonymous ()