PHP задачи с собеседований
3.03K subscribers
497 photos
6 videos
11 files
362 links
Задачи, тесты и теоретические вопросы по PHP.

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
Имеется объект ($obj) какого-то класса. Требуется получить список всех свойств класса, которому принадлежит объект?
Anonymous Quiz
25%
get_class_var(get_class($obj))
6%
$get_class_vars(get_class->$obj)
70%
$vars = get_class_vars(get_class($obj))
👎13👍8🔥2
Какая функция возвращает метку времени (timestamp)?
Anonymous Quiz
44%
date()
43%
strtotime()
13%
localtime()
👎25👍5🔥2
Реальный вопрос, реального человека. Помогите разобраться

Предположим есть

$text = '<p> Текст <a href="site" class="js-gps-track js-link" target="_blank"></a></p>
<p>
Текст Текст Текст
<a href="site" class="js-gps-track js-link" target="_blank"></a>
Текст
</p>';

В данный момент используется new DOMDocument

Но по завершению, он удаляет пробелы в начале строчки, а в конце добавляет строчку.

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

$tx = preg_replace_callback('#<a[.]*?</a>#siu', function($m) {

print_r($m);

}, '<p> Текст <a href="site" class="js-gps-track js-link" target="_blank"></a></p>
<p>
Текст 2Текст Текст
<a href="site" class="js-gps-track js-link" target="_blank"></a>
Текст1
</p>');
print_r($tx);

PHP задачи с собеседований
Ищем:  Backend разработчик (PHP, Symfony)
Формат: удаленка

Мы небольшая продуктовая команда.
Делаем большой проект в сфере логистики

Cтэк:
#Symfony, #РostgreSQL, #Redis, #Rabitmq, #Elasticsearch;

Вам будет с нами хорошо, если:
• интересно развиваться в небольшой команде и создавать нагрузочные сервисы
• стремитесь улучшать архитектуру и расти до senior (у нас есть задачи на вырост)
• вы любите хороший код, понимаете ценность код ревью
• вам важно было бы соблюдать work/life ballance (мы считаем что без этого не вырасти)

Мы ожидаем:
• middle/senior
• опыт PHP от 2 лет
• опыт Symfony от 2 лет
• знание патернов проектирования и умение их применять
• опыт работы с высокими нагрузками
• опыт работы с интеграциями по API
Пишите в лс @alan_g15

Формат сотрудничества:
Готовы рассмотреть на проект от 2 мес или полноценно в команду
Вам у нас понравится
ЗП готовы обсуждать: 2500-4000$
👍3
👨🏻‍💻 Вопрос заключается в следующем...

Как реализовать вход по роли к сайту?

Есть роль пользователь и оператор, необходимо чтоб при входе открывалась определенная страница для пользователя и определенная для оператора.

Как можно это сделать?

$_SESSION['operator'] -> Оператор
$_SESSION['polz'] -> Пользователь

if ($_SESSION['operator'])
{
//При выполнении этого условия, должен располагаться, код, контент доступный только "Оператору"
header('Location: ../mainpageoper.php');
}
elseif ($_SESSION['polz'])
{
//При выполнении этого условия, должен располагаться, код, контент доступный только "Пользователю"
header('Location: ../mainpagepolz.php');
}
if( [role] == 1 ) { $_SESSION['polz'] =1; }
if( [role] == 2 ) { $_SESSION['operator'] =1; }

PHP задачи с собеседований
Привет, на связи Podlodka PHP Crew! Большинство русскоязычных конференций и митапов по PHP приостановлены. Но мы продолжаем собирать комьюнити! Во 2-м сезоне поговорим, как внедрять в работу новые инструменты разработки с пользой для бизнеса.

Вместе с Александром Макаровым, Валентином Удальцовым, Александром Кирсановым и другими спикерами разберёмся с основными и продвинутыми сценариями отладки кода, научимся эффективно комбинировать PHP и Docker.

Стартуем уже 27 февраля! В программе:

✴️ Лайвкодинги по поиску ошибок с помощью статического анализа;
✴️ Практика применения Docker;
✴️ Доклады по отладчикам кода и анализу code style;
✴️ Воркшопы по работе с Composer.

Это не всё 😉 В новом сезоне вас ждёт много интересного. За подробностями — на сайт.

Онлайн-конференции Podlodka Crew родились из одноимённого IT подкаста. Каждый сезон длится пять дней — рассматриваем одну тему с разных сторон, чтобы узнать её как можно глубже.

🤑 Успейте забрать свой билет по сниженной цене — ранним пташкам скидки.
👍2
👨🏻‍💻 Вопрос от одного из наших подписчиков

Что выведет код?


class A {
public function __construct(string $a){
$a .= $a;
}
}

class B extends A {
public function __construct(int $a){
$a++;
}
}

$b = new B(1);

var_dump($b);


Варианты:
1) Fatal error: Declaration of B::__construct(int $a) must be compatible with A::__construct(string $a) in /tmp/preview on line 8

2)
object(B)#1 (0) {

}

PHP задачи с собеседований
👨🏻‍💻 Как упростись цепочку условий для фильтра на wordpress?

Есть каталог фильмов на wordpress, где в метатегах постов хранится информация о жанрах, рейтинге и т.п.

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

Как можно упростить цепочку условий, особенно если понадобится добавить новые параметры для фильтра?

if (isset($rating) || isset($genre)) {

if (isset($rating) && isset($genre)) {

$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_rating',
'value' => $rating,
),
array(
'key' => 'film_kind',
'value' => $genre,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));

} else if (isset($rating)) {

$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_rating',
'value' => $rating,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));

} else if (isset($genre)) {

$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_kind',
'value' => $genre,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
}
} else {

$query = new WP_Query(array(
'meta_query' => array(
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
}

PHP задачи с собеседований
👎7👍3
Великий Китайский Файрвол.pdf
3.5 MB
📔 Title: Великий Китайский Файрвол

#book #programming #RU

🌐 Lang.: Russian
🧔 Author: Джеймс Гриффитс
🕘 Year: 2022
📑 Pages: 430
#️⃣ ISBN: -

📝 Description: Фраза "интернет помнит все" обрела второй смысл — контент стал подконтролен, иллюзия анонимности исчезла. Книга рассказывает о том, как Китай первым в мире научился управлять интернетом и как другие страны перенимали его опыт.

@bzd_channel
Kak_napisat_i_prodat_svoy_PHP_skript.pdf
1.5 MB
📔 Title: Как написать и продать свой PHP скрипт

#book #php #RU

🌐 Lang.: Russian
🧔 Author: Самуэль Акопян
🕘 Year: 2021
📑 Pages: 86
#️⃣ ISBN: -

📝 Description: Вы написали свой первый PHP скрипт и хотите его продать. Эта книга поможет Вам с пошаговой инструкцией в этом начинании, а также подскажет как избежать распространённых ошибок при создании и продаже своего собственного программного обеспечения.

– всё сказанное здесь является результатом личного жизненного опыта автора;
– мнение автора может не совпадать с мнением читателей по многим вещам и это нормально;
– не надо пугаться; – везде по тексту словосочетание “PHP скрипт” можно заменить на “C++ программу”, “мобильную аппликацию” или “мою супер-дупер application”;
– это не монография с замахом на докторскую диссертацию, скорее небольшая инструкция к действию для тех, кто в лодке (ну или собирается в неё запрыгнуть);

@bzd_channel
🔥1
📌 Реальная ситуация

В скрипте делается вывод заголовков.

$modified_date = strtotime('2023-02-09 17:25:05');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $modified_date).' GMT');

Если после этого идет сразу exit то заголовок выдается.

Дальше идет вывод кэша из файла.

$cacheFile = '/cache.txt';
$html = file_get_contents($cacheFile);
echo $html;
exit;

сразу пропадает строка Last-Modified.

Ответ сервера:

HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Tue, 21 Feb 2023 07:44:31 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.2.24
Strict-Transport-Security: max-age=31536000;
Content-Encoding: gzip

Не понятно как file_get_contents может отменять заголовок? headers_list() заголовок показывает.

PHP задачи с собеседований
👍1
Что можно сократить в данном php коде?

<?php
function getClosest($search, $array)
{
$num = null;
foreach ($array as $item) {
if ($item['chance'] < $search) {
continue;
}
if ($num === null || $item['chance'] < $num['chance']) {
$num = $item;
}
}
return $num;
}

$case_cost = 100;

$skins = [
$skin = ['cost' => 10000],
$skin = ['cost' => 0.01],
$skin = ['cost' => 5256],
$skin = ['cost' => 425.2],
$skin = ['cost' => 92.4],
$skin = ['cost' => 3124],
$skin = ['cost' => 0.32],
$skin = ['cost' => 213],
];

$array_chance = [];
$array_sum = 0;
foreach ($skins as $item) {
if ($case_cost >= $item['cost']) {
$result = $case_cost / $item['cost'];
} else {
$result = $case_cost * $item['cost'] / 100;
}
$result = round($result);
$array_sum += $result;

array_push($array_chance, $result);
}

$rand_num = rand(0, $array_sum);

$i = 0;
$accum = 0;
foreach ($array_chance as $skin) {
$skins[$i]['chance'] = $skin;
$i++;
}

$accum = 0;
foreach ($skins as &$skin) {
$accum = $skin['chance'] += $accum;
}

print_r($skins);

$rand_element = getClosest($rand_num, $skins);

echo '<br>' . $rand_num . '<br>';

print_r($rand_element);

PHP задачи с собеседований
👍5
📌 Переместить запись из кастомного типа поста в др. рубрику при наступлении условия (wordpress)

Есть кастомный тип постов "Мероприятия". В нем две рубрики: ближайшие и архивные. Понятно, что при создании все события попадают в ближайшие. А как сделать так, чтобы после прошествия дня события, оно автоматически меняло рубрику, а не админ вручную переставлял привязку. С помощью acf7 создано кастомное поле даты. И есть следующий код:

function update_event_taxonomy() {
$today = date('Y-m-d');
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'event_date',
'value' => $today,
'compare' => '<',
'type' => 'DATE',
),
),
);
$event_posts = get_posts($args);

foreach ($event_posts as $event_post) {
$event_date = get_field('event_date', $event_post->ID);
$event_tax = ($event_date < $today) ? 'archive' : 'upcoming';
wp_set_post_terms($event_post->ID, $event_tax, 'events_category', false);
}
}

function schedule_event_taxonomy_update() {
if (!wp_next_scheduled('update_event_taxonomy')) {
wp_schedule_event(time(), 'hourly', 'update_event_taxonomy');
}
}

add_action('wp', 'schedule_event_taxonomy_update');


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

Где ошибка или как это правильно/лучше сделать?

PHP задачи с собеседований
👎12👍1
👨🏻‍💻 Реши задачу

Дан массив ["Dima", 11, true, null, [33,44], 1.23]. Нужно вывести информацию о его элементах на экран. Каждый вывод информации об элементе массива должен нумероваться, начиная с единицы. Для решения задачи используйте цикл foreach и функцию var_dump().

PHP задачи с собеседований
👨🏻‍💻 Решение задачи 👆🏻

<?php

//Массив с переменными
$m=["Dima", 11, true, null, [33,44], 1.23];

//Выводим данные о значениях массива
foreach($m as $key=>$val){
//Чтобы нумерация шла с 1
$n=$key+1;
//Выводим информацию об элементе массива
var_dump($val);
echo " - {$n}-й элемент массива<br>";
}

?>


PHP задачи с собеседований
👎15👍3
👨🏻‍💻 Реши задачу

Создайте массив, в который поместите все натуральные числа, не превышающие 15. Отфильтруйте полученный массив при помощи функции array_filter(), удалив из массива все нечетные значения. Выведите оставшиеся элементы массива на экран.

PHP задачи с собеседований
👎5👍2
👨🏻‍💻 Решение задачи 👆🏻

<?php

//Создаем пустой массив. Можно и $m=array();
$m=[];
//Циклом заполняем его
for($n=1;$n<=15;$n++){
//Добавляем текущее число n в массив
$m[]=$n;
}

//Создаем callback-функцию для фильтрации элементов
function my_func($val){
//Если элемент массива нечетное число
if($val%2!=0){
//Возвращаем FALSE, чтобы элемент был удален из массива
return false;
}
//Возвращаем TRUE для четного элемента массива
return true;
}

//Фильтруем элементы массива
$m = array_filter($m,"my_func");
//Выводим четные элементы массива на экран через пробел
foreach($m as $value){
echo $value.' ';
}

?>

PHP задачи с собеседований
👎17👍3