コード例 #1
0
ファイル: builder.php プロジェクト: sneakquie/ClassLib
_class('BuilderPizza', array(_protected('_pizza'), _public('getPizza', function () {
    return _this('_pizza');
}), _public('createNewPizza', function () {
    _this('_pizza', _new('Pizza'));
}), _public('buildPastry', function () {
}), _public('buildSauce', function () {
}), _public('buildGarniture', function () {
})));
_class('BuilderPizzaHawaii', _extends('BuilderPizza'), array(_public('buildPastry', function () {
    _call(_this('_pizza'), 'setPastry', 'normal');
}), _public('buildSauce', function () {
    _call(_this('_pizza'), 'setSauce', 'soft');
}), _public('buildGarniture', function () {
    _call(_this('_pizza'), 'setGarniture', 'jambon+ananas');
})));
_class('BuilderPizzaSpicy', _extends('BuilderPizza'), array(_public('buildPastry', function () {
    _call(_this('_pizza'), 'setPastry', 'puff');
}), _public('buildSauce', function () {
    _call(_this('_pizza'), 'setSauce', 'hot');
}), _public('buildGarniture', function () {
    _call(_this('_pizza'), 'setGarniture', 'pepperoni+salami');
})));
_class('PizzaBuilder', array(_private('_builderPizza'), _public('setBuilderPizza', function ($mp) {
    _this('_builderPizza', $mp);
}), _public('getPizza', function () {
    return _call(_this('_builderPizza'), 'getPizza');
}), _public('constructPizza', function () {
    _call(_this('_builderPizza'), 'createNewPizza');
    _call(_this('_builderPizza'), 'buildPastry');
    _call(_this('_builderPizza'), 'buildSauce');
    _call(_this('_builderPizza'), 'buildGarniture');
コード例 #2
0
ファイル: Controller.php プロジェクト: unionbt/hanpaimall
 protected function _make_output($type, $message_name = NULL, $url = FALSE, array $data = [], $export_data = FALSE)
 {
     $msg = $message_name;
     if (!is_array($message_name)) {
         $msg = Lang::has($message_name) ? trans($message_name) : (Lang::has('core::common.' . $message_name) ? trans('core::common.' . $message_name) : []);
         is_string($msg) && ($msg = ['content' => $msg]);
         $default = trans('core::common.default.' . $type);
         $msg = _extends($msg, $default);
         //填充
     }
     $default = trans('core::common.default.' . $type);
     $msg = _extends($msg, $default);
     if (!empty($data)) {
         foreach ($msg as &$value) {
             $value = __($value, $data);
         }
         //转化成有意义的文字
     }
     $msg = array_keyfilter($msg, 'title,content');
     $result = array('result' => $type, 'time' => time(), 'duration' => microtime(TRUE) - LARAVEL_START, 'uid' => $this->user['id'], 'message' => $msg, 'url' => is_string($url) ? url($url) : $url, 'data' => $export_data ? $data : []);
     return $this->output($result);
 }
コード例 #3
0
<?php

include './class_lib.php';
_interface('MyInterface', array(_public('my_function')));
_interface('MySecondInterface', array(_public('my_second_function')));
_class('ParentClass', _implements('MyInterface'), array(_public('my_function', function () {
    return 'Hello, world';
})));
_class('SecondParentClass', _implements('MyInterface', 'MySecondInterface'), array(_public('my_function', function () {
    return 'Hello from ' . _self();
}), _public('my_second_function', function () {
    return 'World, hello!';
})));
_class('Child', _extends('SecondParentClass', 'ParentClass'));
print_r(_call(_new('Child'), 'my_function'));
// output: Hello, world
print_r(_call(_new('Child'), 'my_second_function'));
// output: World, hello!
コード例 #4
0
ファイル: array.func.php プロジェクト: unionbt/hanpaimall
/**
 * 以一个数组为基础,完善另外一个数组中没有的项目(并且会删除多余的项)
 * 优先以$arr_set的值为准,比如:
 * $set = array('k1' => 'v1','k5' => 'v2'); $base = array('k1' => 'default','k2' => 'default');
 * 使用 _extends($set,$base);得到结果为 array('k1' => 'v1','k2' => 'default'); 故结果以$base为蓝本,但是$a里面原有的值不会覆盖
 * [注意] 当$base中出现NULL时,默认匹配标量(NULL在PHP中属于非标量)
 *
 * @example 复杂的例子如:
 * $set = array(				$base = array(
 *	 'a' => array('e','a'),			'a' => array(),				使用$set['a'],有值,类型一致,均为非标量,($base['a']空数组,则表示$set['a']为数组即可)
 *	 'b' => '2a',					'b' => 5, 					使用$set['b'],有值,类型一致,均为标量
 *	 'c' => array('e','g'),			'c'=> 3, 					使用$base['c'],因为类型不一致,
 *	 'd' => NULL,					'd' => 5, 					使用$base['c'],因为$set['c']为NULL,
 *	 'e' => 123,					'e' => array(), 			使用$base['e'],因为类型不一致,(虽然$base中为空数组,但是$set中类型不一致,仍然使用$base)
 *									'f' => '33',				使用$base['f'],因为无$set['f']
 *	 'g' => array('k' => '222'),	'g' => array('k' => '111'),	递归到子项,匹配规则同上
 * );							);
 *
 * @param array $arr_set 需要调整的数组
 * @param array $arr_base 基础数组
 * @return array 返回调整之后的结果
 */
function _extends(&$arr_set, array &$arr_base)
{
    $result = array();
    if (is_array($arr_set)) {
        foreach ($arr_base as $k => $v) {
            $is_set = isset($arr_set[$k]);
            $is_array = $is_set && is_array($arr_set[$k]);
            $result[$k] = $v;
            //先设置默认值
            if ($is_set) {
                if (is_array($v) && !empty($v)) {
                    //base为数组并且非空
                    $result[$k] = _extends($arr_set[$k], $v);
                } elseif (is_null($v)) {
                    is_scalar($arr_set[$k]) && ($result[$k] = $arr_set[$k]);
                } else {
                    is_scalar($v) == is_scalar($arr_set[$k]) && ($result[$k] = $arr_set[$k]);
                }
                //如果base和set的类型一致,则使用set的值
            }
        }
    } else {
        $result = $arr_base;
    }
    return $result;
}