• Конструкция include и return?

    BedwaRe
    @BedwaRe
    Пиши код
    Может так понятней будет:
    Файл foo.php
    $foo = "foo-php";
    return $foo;

    Файл bar.php
    $bar = "bar-php";
    Подключение:
    $x = include("foo.php"); // $x хранит "foo-php", т.к. использовался return
    $y = include("bar.php"); // $y хранит 1, т.к. нет return, соответственно функция include вернула 1

    Если бы файл не удалось подключить, то в обоих случаях вернулось бы false.
    Ответ написан
    Комментировать
  • Как вернуть кнопки браузеров в PHPStorm?

    zorro76
    @zorro76
    Попробуй посмотреть Settings - Tools - WebBrowsers внизу там стоит галочка: Show Browser popup in the editor (должно быть отмечено)
    Ответ написан
    4 комментария
  • Storage laravel и Intervention Image?

    @Silm
    image.intervention.io/api/encode
    Storage::disk('uploads')->put('thumbs/pisture.jpg', $img->encode('jpg', 100));
    Ответ написан
    4 комментария
  • Как найти баланс чисел в массиве?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Алгоритм такой. Все элементы помещаем в одну кучу (массив). Сортируем по убыванию. Дальше начинаем раскидывать по двум новым массивам. Параллельно считаем сумму каждого массива. Таким образом, раскладываем сначала большие числа, потом всё меньше и меньше. Каждый раз кладём новое число в тот массив, где сумма меньше.

    Очевидно, что последними будут идти самые маленькие числа, которые будут старательно минимизировать разницу в суммах. Доказать, что в итоге разница будет минимальна, я не могу (лень), но интуиция подсказывает, что это будет так.


    UPD:
    Такой алгоритм полного перебора
    function balance(arr1, arr2) {
      let all = arr1.concat(arr2);
    	//all.sort((a, b) => a - b); //Для исключения одинаковых.
    	let all_sum = all.reduce((a,b)=>a+b,0);
    	let len = all.length;
    	let cnt = Math.floor(len * 0.5);
    	let arr_result = new Array(cnt); //Массив выбранных индексов
    	let idx_begin = 0; //Начальная глубина перебора (индекс в arr_result)
    	let sum_begin = 0; //Начальная сумма частично перебранных элементов
    	
    	if (cnt === len * 0.5) { //Оптимизация
    		arr_result[0] = 0;
    		idx_begin = 1;
    		sum_begin = all[0];
    	}
    	
    	let min_diff = all_sum; //Присваиваем какое-то заведомо большое число.
    	let arr_answer; //Итоговый ответ
    	
    	//Проверяем следующий уровень глубины
    	//idx - глубина, sum - сумма всех элементов до этого
    	function check(idx, sum) { 
    		if (idx === cnt) { //Конец перебора. Проверяем, подходит ли.
    			let diff = Math.abs((all_sum - sum) - sum);
    			if (diff < min_diff) { //Подходит
    				min_diff = diff; //Запоминаем новый лучший результат.
    				arr_answer = arr_result.slice(); //Копируем
    			}
    			return;
    		}
    		//Иначе идем дальше вглубь на следующий уровень.
    		let start = idx === 0 ? 0 : arr_result[idx-1] + 1;
    		let max = len - cnt + idx;
    		for(let i = start; i <= max; i++){ //Ключевой цикл алгоритма
    			//if (i > start && all[i] === all[i-1]) continue;
    			arr_result[idx] = i;
    			check(idx+1, sum+all[i]); //Рекурсия
    		}
    	}
    	check(idx_begin,sum_begin); //Начать перебор. Поехали!
    	
    	arr1 = [];
    	arr2 = [];
    	
    	//Фасуем полученный ответ по массивам уже в виде значений.
    	let j = 0;
    	all.forEach((e,i)=>{
    		if (i === arr_answer[j]) {
    			arr1.push(e);
    			j++;
    		} else arr2.push(e);
    	});
    	
    	return {
    		arr1: arr1,
    		arr2: arr2,
    		sum1: arr1.reduce((a,b)=>a+b,0),
    		sum2: arr2.reduce((a,b)=>a+b,0),
    	}
    }
    
    var arr1 = [10, 300, 25, 75];
    var arr2 = [50, 125, 500, 10];
    balance(arr1, arr2);
    Ответ написан
  • Какой алгоритм использовать для поиска кратчайшего пути в ненаправленном графе через все вершины?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Гамильтонов путь тут ни при чём - ведь нет запрета проходить одну вершину дважды? Но это в чистом виде задача коммивояжера. Тоже входит в класс NP. Точное решение будет слишком долгим, надо искать приближённые.
    Ответ написан
    3 комментария
  • Laravel 5.8 требует php7.2?

    @SergeRod
    В разделе config файла composer.json вашего проекта укажите в конфигурации вашей платформы целевую версию PHP.

    Примерно так должно выглядеть:

    "config": {
        "platform": {"php": "7.1.0"},
    }


    Composer будет стараться подбирать подходящие версии пакетов, совместимые с этой платформой. Или ругаться, если найти не сможет.
    Ответ написан
    2 комментария
  • Стоит ли тратить время на Битрикс?

    Если вы встанете на путь 1C-Bitrix, запомните этот день, и когда увязните в багах этой CMS, вспомните об вашей прекрасной жизни до того дня! =)
    Ответ написан
    1 комментарий
  • Стоит ли тратить время на Битрикс?

    kompi
    @kompi
    nullstack devoops
    ИМХО. Стоит тратить время только в одном случае, когда от программирования хочется только денег. Работа есть всегда, спрос стабилен.
    А иначе, по истечении n-го времени, костыли и подпорки начнут ужасно раздражать и мозолить глаза.
    Начнётся медленная и неумолимая деградация скиллов.
    Ответ написан
    Комментировать
  • Ребята, зацените тестовое задание?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    1 и 2. Они хотят увидеть как вы представляете себе правильную архитектуру приложения и как вы способны реализовать её сами. Тут как бы завуалировано "а как бы выглядел микрофреймворк, если бы его писали вы". По результирующему коду смогут понять, как у вас с проектированием.
    3. Да. Они полезны даже чисто для себя, если вы не Senior Developer.
    Ответ написан
    3 комментария
  • Ребята, зацените тестовое задание?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Это не тестовое задание, а вполне себе полноценный заказ на разработку небольшой штуки.
    Несколько часов работы, за такое заплатить как минимум должны.

    Относиться, тут уж как сами хотите.
    Тестовое задание 2-4 часа допустим(моя скорость примерная).
    Собеседование 1-2 часа(дорога, общение), в лучшем случае.

    Итого надо потратить на непонятно кого около 6 часов, и бесплатно поработать.
    Так себе в общем имхо.

    P.S.
    PHP-фреймворки использовать нельзя

    за такое сейчас уже можно вообще уходить сразу.
    composer относится к "использованию" фреймворков? Сейчас это часть работы - искать готовые решения и внедрять. А не писать велосипеды на каждый чих.
    Ответ написан
    4 комментария
  • В каком случае лучше использовать абстрактный класс, а в каком интерфейсы?

    @Barmunk
    Интерфейс нужно создавать, если ты архитектор, и в дальнейшем остальные работники будут наследовать свои классы только от этого интерфейса/ов. Тем самым ты можешь рулить масштабированием всего проекта.

    Абстрактные классы, это больше частный случай, который идет ниже по иерархии.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев
  • Кто нибудь работал в Webmasters Forge Ltd?

    @Serdonda
    выполнил их тестовое задание, назначили собеседование.
    с первых минут собеседования они мне не понравились - слишком по хамски ведет себя собеседователь.
    Начну с того что первым же вопросом с упреком было почему я не включил видеорежим в скайпе - сразу сказал что это моя приватность хочу показываю свое лицо, хочу нет - тем более что еще не сотрудничаем для того чтобы мне быть в этом плане чем то обязанным.
    Собственно на этом можно было и заканчивать. Но решил послушать что будут спрашивать - спрашивают довольно много и разного. В каждой сфере/технологии пытаются понять понимаешь ли ты суть или просто нахапался поверхностных фраз.
    Как специалисты возможно и не плохие, но как люди - хамлюги и сильно завышенное мнение о собственных знаниях. Исходя из этого уже через полчаса общения я сделал для себя вывод что ни за какие деньги не буду портить себе нервы с такими работодателями.
    Ответ написан
    Комментировать
  • PHP и Linux: в чем плюсы?

    calirails
    @calirails
    Работайте там, где удобно. И на Windows можно спокойно работать, абсолютно не напрягаясь. Начнете менять шило на мыло - потеряете время, и знаний не приобретете.
    Ответ написан
    2 комментария
  • Как убрать постоянное индексирование node_modules у PhpStorm?

    CMD+, (настройки) -> Editor -> File Types -> внизу:

    Ignore files and folders


    Нужно через точку с запятой добавить:

    node_modules;
    Ответ написан
    Комментировать
  • Как отправить сообщение к конкретным пользователям?

    Aliansys
    @Aliansys
    Из документации socket.io (отправка сообщений)
    // отправить текущему сокету сформировавшему запрос (туда откуда пришла)
    socket.emit('message', "this is a test");
    
    // отправить всем пользователям, включая отправителя
    io.sockets.emit('message', "this is a test");
    
    // отправить всем, кроме отправителя
    socket.broadcast.emit('message', "this is a test");
    
    // отправить всем клиентам в комнате (канале) 'game', кроме отправителя
    socket.broadcast.to('game').emit('message', 'nice game');
    
    // отправить всем клиентам в комнате (канале) 'game', включая отправителя
    io.sockets.in('game').emit('message', 'cool game');
    
    // отправить конкретному сокету, по socketid
    io.sockets.socket(socketid).emit('message', 'for your eyes only');
    Ответ написан
    19 комментариев
  • Как обернуть выделенный текст в кавычки в PhpStorm?

    @EugenCherniy
    File -> Settings -> Editor -> SmartKeys
    Включить Surround selection on typing quote oe brace
    Ответ написан
    1 комментарий