Блог Вячеслава Волкова

Кто работает целый день, тому некогда зарабатывать деньги

— Джон Дэвисон Рокфеллер

Тег / php

JSON Сериализация класса php с помощью JsonSerializable

Очень часто возникает ситуация когда необходимо сериализовать тот или иной класс в JSON представление по определенным правилам.

Например, мы можем это сделать с помощью такой конструкции.
<?php
class Test {
	public $a = 'A';
	public $b = 'B';
}

$b = new Test();
echo json_encode($b);
?>

На выходе мы получим вот такой результат:
{"a":"A","b":"B"}

Но как быть, например, если у класса у нас есть приватные или продектед свойства, а при сериализации они все равно должны быть видны. Например, вот такой пример:
<?php
class Test {
	protected $a = 'A';
	protected $b;
}

$b = new Test();
echo json_encode($b);

На выходе мы получим просто пустой объект {}.

Для исправления этой проблемы в PHP существует интерфейс JsonSerializable, который и позволяет нам сериализовать класс по каки-то условиям. Например,
<?php
class Test implements JsonSerializable {
	protected $a = 'A';
	protected $b = true;
	public function jsonSerialize() {
		$result = array(
			'value' => $this->a,
			'result' => $this->b
		);
		return $result;
	}
}
$b = new Test();
echo json_encode($b);
?>

Нам нужно лишь реализовать метод jsonSerialize. Теперь на выходе у нас будет вот такой результат:
{"value":"A","result":true}

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

И базовый класс модели сериализации выглядит уже вот так.
<?php namespace App\Model;
class BaseJsonModel extends Base implements \JsonSerializable {
	public function __construct() {
		parent::__construct();
	}
	public function jsonSerialize() {
		$reflect = new \ReflectionClass($this);
		$props   = $reflect->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED);
		$result = array();
		foreach($props as $item) {
			$name = $item->getName();
			$result[$name] = $this->$name;
		}
		return $result;
	}
	public function __toString() {
		return json_encode($this->jsonSerialize(), JSON_UNESCAPED_UNICODE);
	}
}

Умник! Играй с друзьями.

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

Чаще всего игры в социальных представлены как Flash контейнер или через iframe. Если раньше большая часть игр была на Flash, то благодаря технологиям которые сегодня дает веб уже можно писать многопользовательские и анимационные игры.

Вот и в один из вечеров я решил попробовать написать свою игру и посмотреть на каких технологиях это можно сделать. Моя игра Вконтакте http://vk.com/app4533532. А дальше небольшое описание. Узнать больше »

wordpress: get_the_content() с форматированием

Если вы пользовались функцией get_the_content(), то замечали, что она возвращает данные в не форматированном виде. Функция the_content() же возвращает форматированные данные.
<?php echo get_the_content(); ?>
<?php the_content(); ?>

Для того, что бы функция get_the_content() возвращала форматированные данные, к ней необходимо применить фильтр the_content. Для этого напишем свою функцию get_formatting_content() и поместим ее в файл "functions.php".
function get_formatting_content ($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
	$content = get_the_content($more_link_text, $stripteaser, $more_file);
	$content = apply_filters('the_content', $content);
	$content = str_replace(']]>', ']]&gt;', $content);
	return $content;
}

Пишем плагин-виджет для WordPress и публикуем в репозитории

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

Создание виджета ничем не отличается от написания плагина для Wordpress, которую я писал в предыдущей статье. Но в этот раз, я хотел бы рассказать не только о том, как написать свой виджет, но о том, как добавить плагин в репозиторий Wordpress. Узнать больше »

Пишем бота на PHP для Twitter или как пользоваться Twitter API (oAuth)

На днях столкнулся с необходимость написания небольшого бота для Twitter, который бы отправлял новости в мой аккаунт. Сразу отправился на изучение Twitter API. В принципе, там нет ничего сложного. Всего около 50 запросов.

Небольшую сложность представляет собой только oAuth аутентификация, которая на первый взгляд кажется какой-то абсурдной. Раньше, что бы обновить статус в своем аккаунте, можно было воспользоваться простой HTTP аутентификации, но с 31 августа 2010 года она была заменена полностью на oAuth.

Поэтому прежде чем отправить новый Твит надо пройти всю процедуру авторизации и получение ключей доступа.

Узнать больше »

Создание Doctrine YAML через MySQL Workbench

Недавно стал пользоваться программой MySQL Workbench. Приложение меня очень порадовало, в нем очень удобно проектировать структуру базы данных, которую затем можно легко экспортировать на сервер Баз Данных (Forward Engineering). Так же можно использовать обратную разработку (Reverse Engineering): создание ER диаграммы по существующей структуре Базы Данных. Кроме того, в приложении есть синхронизация модели и существующей БД, что тоже очень удобно при разработке.

Но так как мы разрабатываем наши продукты с использованием ORM Doctrine, то кроме структуры БД необходимо было создать модели для доступа к данным. И тут я вспомнил, что один хороший человек, как-то говорил, что для Workbench есть дополнение, которое создает Doctrine YAML сразу из приложения. Немного поискав в инете, плагин был успешно найден. Страница разработчика находится вот здесь.

Используя данный плагин очень удобно и быстро можно создавать схемы для будущих моделей.
Узнать больше »

Программирование. Стоит ли изобретать велосипеды?

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

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

Узнать больше »

Отправка Email средствами php

Одним из самых распространенных способов обмена информацией в Интернете является электронная почта или другими словами E-mail сообщение.

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

И вот однажды, как мне в этот раз, Вам понадобилось отправить сообщение пользователю по email. И тут сразу возник вопрос, какими средствами это можно сделать на PHP? Рассмотрим несколько возможных способов.
Узнать больше »

Как написать плагин для WordPress

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

Вы идете на "склад" плагинов для wordpress и обнаруживаете, что необходимого плагина для Вас нету. Что же делать? Как быть ? Если вы хотя бы немного знакомы с азами программирования на php, верстке, то Вам не составит труда Самому написать плагин для Wordpress.

А теперь отправимся на "кухню" для приготовления нашего плагина.

p.s. Если знаний в php и верстке нету... не расстраивайтесь, попросите кого-либо написать Вам нужный функционал :)

Узнать больше »

Склонение чисел, реализация на PHP

Все программисты порой сталкиваются с проблемой, когда необходимо добавить нужное окончание к слову, в зависимости от его числового значения. Например, ситуация с отзывами на сайте. Бывает "1 отзыв", "2 отзыва" и "12 отзывов".
С такой же проблемой столкнулся я сегодня, и нашел вот такую удобную функцию, которую реализовал как хелпер для Symfony. Назвал его "numberEndHelper.php" и разместил в каталоге для хелперов.

Это небольшая, но очень мощная функция для склонения слов-чисел, в данном случае — выставление правильных окончаний у существительных относящихся к числительному
function NumberEnd($number, $titles) {
	$cases = array (2, 0, 1, 1, 1, 2);
   	return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}

И теперь можно ее использовать. Для вызова нужного хелпера Symfony используется метод
 use_helper('NumberEnd');
 $a = 21;
 echo $a.' отзыв'.NumberEnd($a, array('','а','ов'));

В итоге мы получим "21 отзыв".
Страница 1 из 212