Skip to content

Instantly share code, notes, and snippets.

View madfriend's full-sized avatar

Alex Chuchunkov madfriend

  • Yandex, OpenCorpora
  • St. Petersburg, Russia
View GitHub Profile
@madfriend
madfriend / lazystring.php
Created March 15, 2012 20:08
Lazy Strings class
<?php
// accepts default string and test function.
// test function is tweaked everytime object of class LazyStrings is casted to string,
// if test function returns FALSE/NULL default string is returned, otherwise the result of
// test.
class LazyString {
private $_default, $_tweak;
def isPalindrome(word):
if len(word)<2:
return boolean(word)
return (word[0] is word[-1]) ? IsPalindrome(word[1:-2]) : False
@madfriend
madfriend / libtraits.php
Created April 29, 2012 21:27
PHP 5.4 Pattern Traits
<?php
namespace traits;
trait Singleton {
// Для тех, кто не предусмотрел конструктор в классе
private function __construct() {
}
@madfriend
madfriend / gist:2704897
Created May 15, 2012 20:31
How to treat the most stupid thing in PHP
<?php
// Assume this function definition:
function foo($bar, $baz = 'qux') {
return $bar.$baz;
}
// Oh crap, something went wrong, and we call it without arguments:
$foo = foo();
CMS:
Database configurator: Propel (http://www.propelorm.org/), only migrations?
Model: Paris (https://github.com/j4mie/paris)
Controller: own, with given tools
Router: Klein (https://github.com/chriso/klein.php)
Packaging: Composer
View: Twig vs Smarty
User management: ??
Application: ??
@madfriend
madfriend / foreach.php
Created June 29, 2012 09:03
PHP foreach fun
<?php
// How can foreach be implemented with while?
while (list($key, $value) = each($array)) {
print "$key is $value".PHP_EOL;
}
// How to get rid of @ in foreach (@$arr .. ) ?
// (this is always a bad practice, but anyway)
@madfriend
madfriend / loops.php
Created August 22, 2012 18:43
PHP loop API
<?php
function loop($count, $callback) {
if (is_int($count)) {
for ($i = 0; $i < $count; $i++) {
$callback($i);
}
}
elseif(is_array($count)) {
$_copy = $count;
@madfriend
madfriend / gist:3429018
Created August 22, 2012 20:19
Bot API example
<?php
// A short example of my current bot API usage
hear("/^close( issue)? #(?P<id>\d+)/iu", function($bot, $msg, $matches) {
// This bot likes to work with Redmine
$issue = new \Redmine\Issue();
$issue = $issue->find($matches['id']);
// Is issue present?
@madfriend
madfriend / ColorCLI.php
Created October 10, 2012 13:15 — forked from donatj/ColorCLI.php
Simple CLI color class
<?php
class Colorize {
static $foreground_colors = array(
'bold' => '1', 'dim' => '2',
'black' => '0;30', 'dark_gray' => '1;30',
'blue' => '0;34', 'light_blue' => '1;34',
'green' => '0;32', 'light_green' => '1;32',
'cyan' => '0;36', 'light_cyan' => '1;36',
@madfriend
madfriend / preg_match_callback.php
Created April 17, 2013 20:14
preg_match_all + callbacks = preg_match_callback. No support for flags though.
<?php
function preg_match_callback($expression, $subject, $callback) {
static $matches_count = 0;
preg_replace_callback($expression, function($matches) use($callback) {
call_user_func($callback, $matches);
}, $subject, -1, $matches_count);
return $matches_count;
}