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.

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

Опубликовано

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

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

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

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

Опубликовано

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

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

Как написать плагин для 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