trait kmu_trait {
public $index;
public $kmu;
public function __construct(int $num) {
$this -> index = $num;
$this -> kmu = $this -> search_kmu();
}
private function search_kmu() {
global $mysqli;
global $tasks;
if ($tasks[$this -> index]['index'] == 'repost_arrived_container_vk') {
return false;
}else {
$sql = $mysqli -> query("SELECT * FROM price WHERE namber_p_p=".$tasks[$this -> index]['id_kmu']);
if ($sql == true) {
$kmu = mysqli_fetch_assoc($sql);
}else {
$kmu = NULL;
$errore = file_put_contents(ERRORE, 'Ошибка подключения к базе данных! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
return $kmu;
}
}
}
class MY_CLASS_1 {
use kmu_trait;
//Далее методы
}
class MY_CLASS_2 extends MY_CLASS{
use kmu_trait;
//Далее методы
}
/*=======================| ТРЕЙТЫ |=======================*/
trait kmu_trait {
public $index;
public $kmu;
public function __construct(int $num) {
$this -> index = $num;
$this -> kmu = $this -> search_kmu();
}
private function search_kmu() {
global $mysqli;
global $tasks;
if ($tasks[$this -> index]['index'] == 'repost_arrived_container_vk') {
return false;
}else {
$sql = $mysqli -> query("SELECT * FROM price WHERE namber_p_p=".$tasks[$this -> index]['id_kmu']);
if ($sql == true) {
$kmu = mysqli_fetch_assoc($sql);
}else {
$kmu = NULL;
$errore = file_put_contents(ERRORE, 'Ошибка подключения к базе данных! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
return $kmu;
}
}
}
/*=======================| КЛАССЫ |=======================*/
class VK_GROUP {
use kmu_trait;
public function update_kmu() {
global $tasks;
$res = add_kmu_for_group_vk($this -> kmu);
if ($res == true) {
$tasks[$this -> index]['status'] = 'Выполнено';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}else {
$errore = file_put_contents(ERRORE, 'Ошибка при запросе к API ВК при обновлении КМУ! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}
public function add_kmu() {
global $tasks;
$res = add_kmu_for_group_vk($this -> kmu);
if (gettype($res) == 'integer') {
$tasks[$this -> index]['status'] = 'Выполнено';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}else {
$text_error = serialize($res);
$errore = file_put_contents(ERRORE, 'Ошибка при запросе к API ВК при обновлении КМУ! '.date('H:i:s d.m.Yг.')."\n".$text_error."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}
public function add_post_kmu() {
global $tasks;
if (!empty($this -> kmu['vk_id'])) {
$res = add_card_wall($this -> kmu['vk_id'], $tasks[$this -> index]['text_repost']);
if (!empty($res['post_id'])) {
$tasks[$this -> index]['status'] = 'Выполнено';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}else {
$text_error = serialize($res);
$errore = file_put_contents(ERRORE, 'Ошибка при запросе к API ВК при обновлении КМУ! '.date('H:i:s d.m.Yг.')."\n".$text_error."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}else {
$errore = file_put_contents(ERRORE, 'КМУ '.$this -> kmu['name'].' нет в группе ВК, или ID не занесен в базу данных! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}
public function add_array_card_wall() {
global $tasks;
global $mysqli;
$arr_id = array();
$error = 0;
foreach($tasks[$this -> index]['arr_id_kmu'] as $i => $id) {
$sql = $mysqli -> query("SELECT * FROM price WHERE namber_p_p=".$id);
$kmu = mysqli_fetch_assoc($sql);
if (!empty($kmu['vk_id'])) {
array_push($arr_id, $kmu['vk_id']);
}else {
$errore = file_put_contents(ERRORE, 'КМУ '.$kmu['name'].' нет в группе ВК, или ID не занесен в базу данных! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$error++;
}
}
$res = add_array_card_wall($arr_id, $tasks[$this -> index]['text_repost']);
if (!empty($res['post_id'])) {
if ($error == 0) {
$tasks[$this -> index]['status'] = 'Выполнено';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}else {
$tasks[$this -> index]['status'] = 'Выполнено частично';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}else {
$text_error = serialize($res);
$errore = file_put_contents(ERRORE, 'Ошибка при запросе к API ВК при обновлении КМУ! '.date('H:i:s d.m.Yг.')."\n".$text_error."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}
public function delite_kmu() {
global $tasks;
global $mysqli;
$res = delite_catd_vk($this -> kmu['vk_id']);
if ($res == true) {
$sql = $mysqli -> query("UPDATE price SET vk_id=NULL WHERE namber_p_p=".$this -> kmu['namber_p_p']);
if ($sql == true) {
$tasks[$this -> index]['status'] = 'Выполнено';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}else {
$tasks[$this -> index]['status'] = 'Выполнено частично';
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
$errore = file_put_contents(ERRORE, 'Ошибка подключения к базе данных, не удалось удалить ID_VK из БД! КМУ '.$this -> kmu['name'].' '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
}
}else {
$errore = file_put_contents(ERRORE, 'Ошибка при запросе к API ВК при обновлении КМУ! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$this -> index]['status'] = 'Ошибка';
if (!empty($tasks[$this -> index]['count_error'])) {
$count_error = $tasks[$this -> index]['count_error'];
}else {
$count_error = 0;
}
$tasks[$this -> index]['count_error'] = ++$count_error;
$tasks[$this -> index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
}
}
}
class GROUP_OK extends OK {
use kmu_trait;
}
$res = new GROUP_OK($index);
echo '<pre>';
print_r($res -> kmu);
echo '</pre>';
?>
$kmu = new VK_GROUP($index);
<?php
set_time_limit(3600);
require_once __DIR__ .'/../vk/script.php';
require_once __DIR__ .'/../connection/connection.php';
require_once __DIR__ .'/../ok/script.php';
const LOCK = __DIR__ .'/lock.txt';
const TASKS = __DIR__ .'/tasks.txt';
const ERRORE = __DIR__ .'/log.txt';
//--------------------
error_reporting(E_ALL);
//ini_set('display_errors', 1);//------------------------не забудь убрать!!!
//--------------------
if (!file_exists(LOCK)) {
touch(LOCK);
if (file_exists(TASKS)) {
$tasks = json_decode(file_get_contents(TASKS), true);
if (!empty($tasks)) {
foreach($tasks as $key => $value) {
if ($value['status'] == 'В очереди' or $value['status'] == 'Выполняется' or $value['status'] == 'Ошибка') {
if ($value['status'] == 'Ошибка') {
if ($value['count_error'] >=3) {
continue;
}else {
if (time() < ($value['time_done'] + 600)) {
continue;
}
}
}
$index = $key;
break;
}else {
$index = NULL;
}
}
}else {
$index = NULL;
}
if ($index !== NULL) {
$tasks[$index]['status'] = 'Выполняется';
$tasks[$index]['time_acc'] = time();
$inter_result = file_put_contents(TASKS, json_encode($tasks));
register_shutdown_function('errore');
if ($tasks[$index]['index'] == 'update_kmu_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> update_kmu();
echo 'update_kmu';
}else {
if ($tasks[$index]['index'] == 'add_new_kmu_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> add_kmu();
echo 'add_kmu';
}else {
if ($tasks[$index]['index'] == 'add_repost_new_kmu_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> add_post_kmu();
echo 'add_post_kmu';
}else {
if ($tasks[$index]['index'] == 'repost_arrived_container_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> add_array_card_wall();
echo 'add_array_card_wall';
}else {
if ($tasks[$index]['index'] == 'delite_kmu_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> delite_kmu();
echo 'delite_kmu';
}else {
if ($tasks[$index]['index'] == 'repost_arrived_kmu_vk') {
$kmu = new VK_GROUP($index);
//$res = $kmu -> add_post_kmu();
echo 'add_post_kmu';
}else {
if ($tasks[$index]['index'] == 'update_kmu_ok') {
$id = new VK_GROUP($index);
$kmu = new OK;
//$res = $kmu -> add_card_kmu($id -> kmu);
echo 'add_card_kmu';
}
}
}
}
}
}
}
}else {
$res = delite_tasks();
}
}else {
$errore = file_put_contents(ERRORE, 'Отсутствует файл задач! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
}
unlink(LOCK);
//exit();
}else {
$info = stat(LOCK);
$kill_script = $info['mtime'] + 3600;
if (time() > $kill_script) {
unlink(LOCK);
}
file_put_contents(__DIR__ .'/result.txt', 'Предотвращение повторного вызова скрипта!'.date('H:i:s d.m.Y')."\n", FILE_APPEND);
//exit();
}
/*=======================| ФУНКЦИИ |=======================*/
function errore() {
global $index;
global $tasks;
$error = error_get_last();
if (is_array($error) && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR])) {
while (ob_get_level()) {
ob_end_clean();
}
$errore = file_put_contents(ERRORE, 'Фатальная ошибка при выполнении скрипта! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
$tasks[$index]['status'] = 'Ошибка';
$tasks[$index]['time_done'] = time();
$result = file_put_contents(TASKS, json_encode($tasks));
unlink(LOCK);
}
}
function delite_tasks() {
global $tasks;
$arr_done = array();
foreach($tasks as $i => $val) {
if ($val['status'] == 'Выполнено' and date('d.m.Y', $val['time_done']) == date('d.m.Y', (time() - (60 * 60 * 24 * 7)))) {
unset($tasks[$i]);
}else {
continue;
}
}
$result = file_put_contents(TASKS, json_encode($tasks));
}
Но вот класс VK_GROUP перед ней явно не объявлен.
Столкнулся с необходимостью применения трейтов PHP, и тут проблема.
не совсем понимаю по каким критериям Вы сформировали свое мнение!
Поясните пожалуйста, раз уж написали.
Вопрос, на сколько я знаю, классы, функции и т.п. пишутся в любом месте кода (я имею ввиду выше, ниже, не в блоках if-else и т.п.), не в зависимости от того, где собственно класс или функция вызвана. Это так?
Глобальные переменные
Отсутствие валидаций
Дублирование кода
Вывод и обработка в перемешку
Незнание конструкций } else if { и switch
Непонимание процесса работы интерпретатора, а именно вызовы до объявления
Глобальные переменные
Это плохо для кода?
Отсутствие валидаций
Поясните пожалуйста, если не сложно.
Вывод и обработка в перемешку
Тоже самое. Сам иногда путаюсь)
else if - знаю, просто привык уже.
switch - только недавно изучил, потихоньку внедряю.
Я не учился на программиста, я самоучка - но мне нравиться. По этому естественно стандартных вещей могу не знать.
Я только за, чтобы учиться писать правильно, но вы подскажите, как правильно, а не стройте из себя великого кодермена.
Глобальные переменные
Отсутствие валидаций
Впрочем, опыт ошибок при этом изучении идет в плюс - иначе изучающий просто не понимает, зачем делать так сложно, если можно сделать проще.
Говнокод - не страшно, страшно считать его успехом ;)Согласен!
Кстати, есть ощущение, что процитированное вы поняли с точностью до наоборот.
MY_CLASS
?class MY_CLASS_2 extends MY_CLASS_1{
А где объявлен класс MY_CLASS?
class MY_CLASS_2 extends MY_CLASS_1{
должно быть так