Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр

Тайна Самоцветов: Ключ Сокровищ - Три в ряд

Казуальные, Три в ряд, Головоломки

Играть

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

PHP

С этим тегом используют

Программирование Программист IT Javascript HTML Web-программирование Помощь Все
750 постов сначала свежее
14
dimitrioniks
dimitrioniks
11 месяцев назад
ChatGPT
Серия О программировании не от программиста ( нейросети)

Продолжение поста «Запустил дома нейросеть для программирования ( 60 языков!!)»⁠⁠1

Кто-то наверняка хотел увидеть чем пригодились нейросети и какого уровня код может делать..
Но перед этим скажу, что к сожалению одной сетью Сodestral восхваляемой в предыдущем посте не обошлось.. В итоге использовал по некоторым мелким вопросам ( для уточнений скорей)- Copilot, также https://chat.deepseek.com/coder ( выпустили на днях- тоже довольно хороша для программирования). И даже немного поюзал вышедший чуть ли не вчера ( тоже улучшенный- но не специально для кода)- Claude 3.5 Sonnet, модель которая превосходит GPT-4 почти на всех тестах ( в том числе в программировании)

Claude 3.5 Sonnet уже доступна бесплатно для всех пользователей. ( я регился через sms-activate) за 10р ( конечно нужен VPN)
по факту же- основной код из https://chat.deepseek.com/coder... почему так говорю- потому что уже сам не помню- дня три долбил разные сети)) наверное с 15й попытки сделал рабочий вариант. Штука в том, что пару раз наблюдал за тем, как разные сети начинали глючить..то код не допишут, то еще чего. Я в программировании почти ноль ( на php знаю 2-3 команды и то со словарём..). Хотя кое-какие задачи для себя решаю, пишу технические задания.. И вот ниже тех.задание которое я запихивал в нейросеть- нужное для моих целей.

Ниже также будет опубликован рабочий код. Так что и программисты и любители могут оценить..поругать..или поудивляться что может нейросеть..или оценить свои перспективы.

Итак- вот такое было тех.задание:

Напиши программу на php, которая обрабатывает файл prices.csv, при запуске проверяет существование файлов ostatki.txt и pusto.txt, если эти файлы не существуют, создаёт их. Если файлы существуют, очищает их содержимое. Также если не существует, то создается база sqlite ostatki.db с с двумя таблицами: таблица ostatki с полями artikul ( число), tovar (текстовое), qty ( числовое)  и таблица pusto с полями artikul (число), tovar (числовое), qty (текстовое) . Также добавь вывод ошибок php в начале файла.

Если скрипт запускается первый раз ( это можно проверить по отсутствию базы ostatki.db)- если файла базы нет ostatki.db, она создается как написано выше и запуск считается первым, в этом случае идет обработка файла prices.csv по таким правилам:
файл prices.csv содержит разделители ; ( точка с запятой)

обработка файла prices.csv начинается со второй строки.

2ая колонка в prices.csv это переменная artikul (артикул товара), 3я колонка это name (название товара), 14ая колонка это qty ( количество), считываем все данные из prices.csv построчно, для ускорения процесса используем массив, записываем данные в базу данных ostatki.db в таблицу ostatki по соответствующим названиям полей и переменных ( artikul в artikul и так далее, при условии что в 14й колонке содержится любое число, если в 14й  колонке пусто, тогда данные artikul, tovar записываются в таблицу pusto, а в поле qty этой таблицы pusto записывается текстовое значение zero.

Происходит запись лог файлов ostatki.txt и pusto.txt по таким правилам:

в файл ostatki.txt идет построчная запись товаров с нулевыми остатками, то есть из таблицы ostatki берется товар где qty=0 и в этом случае формируется запись: Товар artikul name закончился, проверьте остатки! И так до тех пор, пока будут проверены все нулевые значения таблицы ostatki в поле qty в базе ostatki.db

в файл pusto.txt построчно записываются значения из таблицы pusto в таком формате Товар artikul name не был заведён по каким-то причинам. После первого запуска идет отправка данных с помощью функции

maillogfile, ее описание в конце текста. И после запуска этой функции maillogfile идет остановка программы, она считается завершенной.
.

При повторном запуске программы ( повторным считается запуск если существует база ostatki.db)

идет проверка на изменение данных в базе данных при сравнении с файлом prices.csv по таким правилам ( начиная со второй строки):

Если в файле prices.csv где 2ая колонка в prices.csv это переменная artikul (артикул товара), 3я колонка это name (название товара), 14ая колонка это qty ( количество), считываем все данные из prices.csv построчно ( ускоряем процесс с помощью массива), если определяется что qty=0 нужно проверить совпадение в базе данных ostatki.db в таблице ostatki по артикулу ( artikul), если в таблице также в qty находится 0, то ничего не делаем, и запись в лог файл ostatki.txt  не производим. Если в таблице prices.csv qty=0 ( это 14ая колонка), а в базе данных ostatki.db в таблице ostatki значение qty больше нуля, тогда делаем запись в лог файл ostatki.txt в формате Товар artikul name закончился, проверьте остатки!

Если при сравнении prices.csv и таблицы ostatki в базе данных ostatki.db при совпадении artikul число qty отличается от нуля ( не пустая строка и не отсутствие значения), и qty в prices.csv отличается от qty в таблице ostatki то делаем перезапись значения qty в базе данных.. Если artikul в prices.csv не находится в ostatki.db в таблице ostatki, при втором  и последующих запусках программы, значит данного товара еще не было и создается новая строка с данными  artikul, tovar, qty и также идёт запись в ostatki.txt такого вида: Добавлен товар artikul name с остатком qty.

Также проверяем проходя 2, 3, 14 колонку файла prices.csv и таблицу pusto в базе данных, если artikul содержит qty от 0 и выше, и при этом данный artikul содержится в таблице pusto, то удаляем эту строку из базы данных из таблицы pusto.

Также идёт проверка таблицы pusto, если в файле prices.csv есть пустые значения в qty ( 14ая колонка), то есть это не 0 и не число, и такое же точно значение уже есть в таблице pusto по значению artikul, и в qty находится zero, то в файл pusto.txt ничего не пишем и проверяем дальше. В итоге после всех проверок

Запускается функция для отправки  maillogfile, ее описание ниже.

Функция maillogfile содержит отправку по заданному адресу с другого заданного адреса  с использованием библиотеки Phpmailer ( она находится в папке PHPMailer/src/, адрес куда отправлять берет из файла email.txt, откуда отправлять и другие настройки берет из файла email.cfg в формате json, пример содержимого email.cfg с соответствующими настройками, чтобы ты знал как создать функцию maillogfile с использованием данных файлов в виде настроек приведены ниже в кавычках {}

{

"smtp_host": "smtp.mail.ru",

"smtp_auth": true,

"smtp_username": "de--@Mail.ru",

"smtp_password": "H--—9H",

"smtp_secure": "ssl",

"smtp_port": 465
“Name”: ”Dimitriy”

}

Здесь Name это имя отправителя, все остальные данные совпадают с переменными..

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

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


Если лог файлы ostatki.txt и pusto.txt пустые- выводится - Ничего не изменилось, поэтому письмо не отправлено. Также проследи чтобы не было проблем с кодировкой при отправке писем, чтобы заголовки и сам текст был в одной кодировке. Также учти чтобы при чтении файла prices.csv не было проблем с кодировкой ( текст внутри этого файла prices.csv в кодировке  windows-1251), следует при записи в базу данных и обработке делать преобразование в utf-8 текстовых данных.

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

Также проверь время выполнения файла и выведи в конце подробную информацию- сколько времени было выполнение файла.

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

<?php

ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL);

function maillogfile($to, $from, $fromName, $smtpSettings) {

require 'PHPMailer/src/PHPMailer.php';

require 'PHPMailer/src/SMTP.php';

require 'PHPMailer/src/Exception.php';

$mail = new PHPMailer\PHPMailer\PHPMailer();

$mail->isSMTP();

$mail->Host = $smtpSettings['smtp_host'];

$mail->SMTPAuth = $smtpSettings['smtp_auth'];

$mail->Username = $smtpSettings['smtp_username'];

$mail->Password = $smtpSettings['smtp_password'];

$mail->SMTPSecure = $smtpSettings['smtp_secure'];

$mail->Port = $smtpSettings['smtp_port'];

$mail->CharSet = 'UTF-8';

$mail->setFrom($from, $fromName);

$mail->addAddress($to);

$mail->Subject = 'Остатки товаров';

$ostatkiContent = file_get_contents('ostatki.txt');

$pustoContent = file_get_contents('pusto.txt');

if (empty($ostatkiContent) && empty($pustoContent)) {

echo "Ничего не изменилось, поэтому письмо не отправлено.";

return;

}

if (!empty($ostatkiContent)) {

$mail->addAttachment('ostatki.txt');

$mail->Body .= $ostatkiContent;

}

if (!empty($pustoContent)) {

$mail->addAttachment('pusto.txt');

$mail->Body .= $pustoContent;

}

if (!$mail->send()) {

echo 'Ошибка, почта не была отправлена.';

echo 'Mailer Error: ' . $mail->ErrorInfo;

} else {

echo 'Почта с нулевыми остатками отправлена.';

}

}

$startTime = microtime(true);

$dbFile = 'ostatki.db';

$csvFile = 'prices.csv';

$ostatkiFile = 'ostatki.txt';

$pustoFile = 'pusto.txt';

$emailFile = 'email.txt';

$emailConfigFile = 'email.cfg';

if (!file_exists($ostatkiFile)) {

file_put_contents($ostatkiFile, '');

} else {

file_put_contents($ostatkiFile, '');

}

if (!file_exists($pustoFile)) {

file_put_contents($pustoFile, '');

} else {

file_put_contents($pustoFile, '');

}

$ostatkiBuffer = '';

$pustoBuffer = '';

if (!file_exists($dbFile)) {

$db = new SQLite3($dbFile);

$db->exec("CREATE TABLE ostatki (artikul INTEGER, tovar TEXT, qty INTEGER)");

$db->exec("CREATE TABLE pusto (artikul INTEGER, tovar TEXT, qty TEXT)");

$db->exec("CREATE INDEX idx_ostatki_artikul ON ostatki (artikul)");

$db->exec("CREATE INDEX idx_pusto_artikul ON pusto (artikul)");

$insertOstatki = $db->prepare("INSERT INTO ostatki (artikul, tovar, qty) VALUES (:artikul, :tovar, :qty)");

$insertPusto = $db->prepare("INSERT INTO pusto (artikul, tovar, qty) VALUES (:artikul, :tovar, 'zero')");

$csvData = [];

if (($handle = fopen($csvFile, "r")) !== FALSE) {

fgetcsv($handle, 0, ";"); // Skip header

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$csvData[] = $data;

}

fclose($handle);

}

$db->exec("BEGIN TRANSACTION");

foreach ($csvData as $data) {

$artikul = $data[1];

$tovar = mb_convert_encoding($data[2], 'UTF-8', 'Windows-1251');

$qty = $data[13];

if (is_numeric($qty)) {

$insertOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$insertOstatki->bindValue(':tovar', $tovar, SQLITE3_TEXT);

$insertOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);

$insertOstatki->execute();

} else {

$insertPusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$insertPusto->bindValue(':tovar', $tovar, SQLITE3_TEXT);

$insertPusto->execute();

}

}

$db->exec("COMMIT");

$ostatkiBuffer = '';

$pustoBuffer = '';

$result = $db->query("SELECT * FROM ostatki WHERE qty = 0");

while ($row = $result->fetchArray()) {

$ostatkiBuffer .= "Товар {$row['artikul']} {$row['tovar']} закончился, проверьте остатки!\n";

}

$result = $db->query("SELECT * FROM pusto");

while ($row = $result->fetchArray()) {

$pustoBuffer .= "Товар {$row['artikul']} {$row['tovar']} не был заведён по каким-то причинам.\n";

}

file_put_contents($ostatkiFile, $ostatkiBuffer);

file_put_contents($pustoFile, $pustoBuffer);

$email = file_get_contents($emailFile);

$emailConfig = json_decode(file_get_contents($emailConfigFile), true);

maillogfile($email, $emailConfig['smtp_username'], $emailConfig['Name'], $emailConfig);

} else {

$db = new SQLite3($dbFile);

$updateOstatki = $db->prepare("UPDATE ostatki SET qty = :qty WHERE artikul = :artikul");

$insertOstatki = $db->prepare("INSERT INTO ostatki (artikul, tovar, qty) VALUES (:artikul, :tovar, :qty)");

$deletePusto = $db->prepare("DELETE FROM pusto WHERE artikul = :artikul");

$insertPusto = $db->prepare("INSERT INTO pusto (artikul, tovar, qty) VALUES (:artikul, :tovar, 'zero')");

$csvData = [];

if (($handle = fopen($csvFile, "r")) !== FALSE) {

fgetcsv($handle, 0, ";"); // Skip header

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {

$csvData[] = $data;

}

fclose($handle);

}

$db->exec("BEGIN TRANSACTION");

foreach ($csvData as $data) {

$artikul = $data[1];

$tovar = mb_convert_encoding($data[2], 'UTF-8', 'Windows-1251');

$qty = $data[13];

if (is_numeric($qty)) {

$result = $db->querySingle("SELECT qty FROM ostatki WHERE artikul = '$artikul'", true);

if ($result) {

if ($result['qty'] != $qty) {

$updateOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);

$updateOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$updateOstatki->execute();

}

if ($qty == 0 && $result['qty'] > 0) {

$ostatkiBuffer .= "Товар {$artikul} {$tovar} закончился, проверьте остатки!\n";

}

} else {

$insertOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$insertOstatki->bindValue(':tovar', $tovar, SQLITE3_TEXT);

$insertOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);

$insertOstatki->execute();

$ostatkiBuffer .= "Добавлен товар {$artikul} {$tovar} с остатком {$qty}.\n";

}

$deletePusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$deletePusto->execute();

} else {

$result = $db->querySingle("SELECT qty FROM pusto WHERE artikul = '$artikul'", true);

if (!$result) {

$insertPusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);

$insertPusto->bindValue(':tovar', $tovar, SQLITE3_TEXT);

$insertPusto->execute();

}

}

}

$db->exec("COMMIT");

file_put_contents($ostatkiFile, $ostatkiBuffer);

file_put_contents($pustoFile, $pustoBuffer);

$email = file_get_contents($emailFile);

$emailConfig = json_decode(file_get_contents($emailConfigFile), true);

maillogfile($email, $emailConfig['smtp_username'], $emailConfig['Name'], $emailConfig);

}

$endTime = microtime(true);

$executionTime = $endTime - $startTime;

echo "Время выполнения скрипта: " . round($executionTime, 2) . " секунд";

?>

Сам бы я такое на написал даже после обучение в полгода-год как мне кажется.. по сути тут работы с нейросетью мне на полдня ( хотя в итоге было три попытки- часа по два каждый раз)
Еще стоит учесть что и тех.задание переписывал ( это уже вторая версия глобально). В первый раз почти все получилось- но что-то пошло не так..и на второй день уже снова делал с нуля..и новое тех.задание ( другими словами). Первые запуски были тормозные- секунд по 20.. было переформулировано- сделай быстрей... Нейросеть давала советы- как сделать лучше- переписывала код.. В итоге обработка файла где 1000 товаров- происходит примерно за секунду.
Так то можно даже чему-то научиться если читать советы:-)
Вот и смотрите теперь- как вам такое? Может ли быть полезно? Всякие обработки эксель файлов на ура с кучей условий ( мне практические такое требуется). В итоге конечно на практических примерах лучше тренироваться- тогда можно научиться чему-то.. а если теоретически- даже и не знаю что у этого железного мозга спрашивать:-)
Были нюансы- на хостинге через планировщик не запускалось- были ошибки- спросил в чем дело- оно тоже дало совет, варианты из-за чего могла быть проблема.. так что пользы много))

Показать полностью
[моё] YouTube Нейронные сети Программирование Чат-бот ChatGPT Гайд Ответ на пост Текст Длиннопост PHP Техническое задание Csv Microsoft Excel
9
4
sh1nkey
sh1nkey
11 месяцев назад

PHP мёртв?⁠⁠

PHP мёртв? Картинка с текстом, Мемы, Программирование, PHP, Мат
Показать полностью 1
Картинка с текстом Мемы Программирование PHP Мат
16
Monsler
Monsler
11 месяцев назад

JPHP, DevelNext: История⁠⁠

Здравствуйте, сегодня поговорим про историю довольно известной в узких кругах имплементации PHP на Java, посмотрим на историю зарождения и закат данного проекта. И в самом конце посмотрим на продолжения данного проекта. Приятного прочтения!

Начало

В 2013г. закрывается DevelStudio (среда создания программ на PHP, написанная на free pascal) и через год начинается разработка совершенно нового проект, ставивший цель перед собой перенести движок PHP на Java с целью написания десктопных программ и игр.

JPHP, DevelNext: История Программист, Программирование, Windows, PHP, Develnext, IT, Программа, Linux, Длиннопост

Скриншот из DevelStudio

Разработка

Спустя год без новостей, появляется первая информация о данном проекте выходит в массы.

Тогда в качестве графической библиотеки использовался SWT (а не JavaFX, как в настоящее время). JPHP был крайне нестабильным, и часто создавал утечки памяти. Ещё через год, в 2015, на YouTube появляется канал Разработчика JPHP, который показал новую среду разработки, подобную DevelStudio.

JPHP, DevelNext: История Программист, Программирование, Windows, PHP, Develnext, IT, Программа, Linux, Длиннопост

Самый первый публичный скриншот DevelNext

Затем, несколькими месяцами позже появляется сайт по DevelNext и JPHP, на котором вплоть до 2016 года публиковались новости, туториалы, проекты и статьи.

Закат

Среда довольно часто обновлялась, но в 2016 выходит осеннее обновление 16.7, которое становится, по факту, последним. Далее, сайт будет заброшен, и новые версии выходить не будут (Кроме обновления исходного кода на GitHub). в 2020г. выходят последние коммиты, после чего даже репозиторий будет заброшен.

Возрождение и дальнейшая разработка

В сентябре 2023г. появляется телеграмм-канал, на котором объявили о продолжении и развитии среды. Это были, конечно, не предыдущие разработчики. Проект назвал себя FXEdition. 8 апреля 2024г. В официальном сообществе DevelNext, которое находится в VK, оригинальный разработчик выкладывает пост, в котором рассказывает, что те кто хотят и дальше обновляемую среду, могут присоединиться к FXE.

JPHP, DevelNext: История Программист, Программирование, Windows, PHP, Develnext, IT, Программа, Linux, Длиннопост
JPHP, DevelNext: История Программист, Программирование, Windows, PHP, Develnext, IT, Программа, Linux, Длиннопост
JPHP, DevelNext: История Программист, Программирование, Windows, PHP, Develnext, IT, Программа, Linux, Длиннопост

Скриншоты FXE Studio

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

Их GitHub

Показать полностью 5
[моё] Программист Программирование Windows PHP Develnext IT Программа Linux Длиннопост
5
4
lookingaround
lookingaround
1 год назад
Серия Стек PHP/MySQL на реальных примерах

Изучение стека PHP/MySQL на реальном проекте⁠⁠

Всем привет.

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

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

Чтобы начать выполнять этого задания, вам придется самим изучить синтаксис PHP и HTML. Благо, там нет ничего сложного.

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

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

Благодарю за внимание!

P.S. никакого подвоха, просто мне заняться нечем

[моё] Программирование Обучение Разработка IT PHP Mysql Текст
18
42
olg3andr
olg3andr
1 год назад
Герои Меча и Магии 3
Серия Большое приключение (Карта Heroes 3: HotA)

Карта-лабиринт⁠⁠

В предыдущем посте-вопросе я затронул создание карты-лабиринта для героев. Идея, конечно, хорошая, но реализация его потребует немалых сил. Для карты "Большое приключение" я создал двух уровневый лабиринт размером 53х60 и, признаюсь честно, заполнить его оказалось тем еще вызовом. Однако, прорубить коридоры это еще пол беды. Нужно его заполнить контентом. На этом этапе мои мозги вытекли :) Лабиринт уже не умещается в моей памяти и требует огромных усилий для отслеживания путей.

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

где: 0 - Пустое место, 1 - стена, 3 - Врата подземного мира

Карта-лабиринт Hota, Герои, HOMM III, Редактор Карт, PHP, Герои меча и магии, Головоломка

Создание текстовой версии лабиринта

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

После всех манипуляций, напишу программу на php для поиска путей из точки A в точку B с визуализацией, чтобы оптимально ставить логические задачки с воротами заданий.

Маленький спойлер :)

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

На этом пока все. Доброго бытия...

Показать полностью 1
[моё] Hota Герои HOMM III Редактор Карт PHP Герои меча и магии Головоломка
6
olg3andr
olg3andr
1 год назад

"Перегрузка" конструктора класса в php⁠⁠

Работая над своим проектом, я случайно придумал интересную способ для имитации перегрузки конструктора в php.

"Перегрузка" конструктора класса в php PHP, Программирование, Длиннопост

Пример использования "перегрузки" конструктора

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

static public function constructor1(Ip $ip, HttpRefererId $hrId) : self;

static public function constructor2(string $ip, string $hrId) : self;

Я просто получаю наслаждение от такого способа создания экземпляра, так как аргументы объявлены явно и с нужными мне типами.

Ну хорошо. А что по этому поводу нам скажет интернет? Залез я туда и, собственно, особо ничего и не нашел. Просмотрел десяток сайтов. В основном везде пытаются реализовать перегрузку через магические методы __call, __set() и __get() или функцию func_get_args().

Вот, например, некто Сергей Мухин предлагает такой способ:

"Перегрузка" конструктора класса в php PHP, Программирование, Длиннопост

Пример с сайта https://sergeymukhin.com/blog/peregruzka-v-php

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

На этом все. А что вы думаете про "мой" способ перегрузки конструктора класса? Какой способ используете вы?

Жду всех заинтересованных внизу в комментариях.

Показать полностью 2
[моё] PHP Программирование Длиннопост
31
WebWiki
1 год назад

GroveTeam 3.0⁠⁠

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

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

Также рас речь зашла на эту тему, форум будет общедоступным и пока что не факт что он будет бесплатным.

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

Примерная дата выхода

Буквально через 2 месяца форум снова встанет на ноги а через 3 месяца и вовсе выпустит новый CGT 3.0 в открытый доступ, а так как он уж очень сильно напоминает всем известный LolzTeam, то желающих скачать его будет много.

GroveTeam 3.0 Форум, Исследователи форумов, Новости, PHP, Пикабу, Длиннопост

GroveTeam white

GroveTeam 3.0 Форум, Исследователи форумов, Новости, PHP, Пикабу, Длиннопост

GroveTeam dark

Показать полностью 2
Форум Исследователи форумов Новости PHP Пикабу Длиннопост
0
0
Аноним
Аноним
1 год назад

GroveTeam 3.0⁠⁠

Еще буквально несколько месяцев назад проект GroveTeam был официально закрыт по причине слива CGT-engine до его релиза. И уже сейчас WenLonger заявляет о появлении новой версии

Что изменится?

Полностью поменяется механика проекта, mysql сменится на PDO что обеспечит пользователям CGT-engine использовать другие СУБД для удобства в использовании, но это еще не всë, на конец началась перепись проекта на php 7, ныне форум будет работать быстрее. Также сменится система префиксов, они будут подобные xenforo.

Заключение

Пока что точную дату выпуска новой CGT никто не знает но уже есть догадки что через 2 месяца сайт снова начнет работать но уже на версии 3.0.

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

GroveTeam 3.0 Форум, Lolzguy, Grove, Игры, PHP
Форум Lolzguy Grove Игры PHP
2
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии