先下载composer,并添加到环境变量里面,然后执行如下命令,将在本目录生成laravel5.8目录
composer dumpautoload -o
composer create-project --prefer-dist laravel/laravel=5.8.* laravel5.8
PHP反射ReflectionClass、ReflectionMethod
PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用
<?php
class person{
public $name;
public $gender;
public function say(){
echo $this->name," \\tis ",$this->gender,"\\r\\n";
}
public function set($name, $value) {
echo "Setting $name to $value \\r\\n";
$this->$name= $value;
}
public function get($name) {
if(!isset($this->$name)){
echo '未设置';
$this->$name="正在为你设置默认值";
}
return $this->$name;
}
}
// 反射获取类的原型
$obj = new ReflectionClass('person');
$className = $obj->getName();
$Methods = $Properties = array();
foreach($obj->getProperties() as $v)
{
$Properties[$v->getName()] = $v;
}
foreach($obj->getMethods() as $v)
{
$Methods[$v->getName()] = $v;
}
echo "class {$className}\\n{\\n";
echo "\\t<br>";
is_array($Properties) && ksort($Properties);
foreach($Properties as $k => $v)
{
if($v->isPublic())
echo 'Public';
if($v->isPrivate())
echo 'Private';
if($v->isProtected())
echo 'protected';
echo "\\t";
echo $k;
echo "<br>";
}
if(is_array($Methods))
ksort($Methods);
foreach($Methods as $k => $v)
{
echo "function {$k}(){}\\n<br>";
}
echo "}\\n";
class person {
Public gender
Public name
function get(){}
function say(){}
function set(){}
}
浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
简单理解就是:表面上使用很简单的调用,其背后框架已经写了很多,控制反转,依赖注入。具体可以看下面简单的例子;
interface SuperModuleInterface
{
/**
* 超能力激活方法
*
* 任何一个超能力都得有该方法,并拥有一个参数
*@param array $target 针对目标,可以是一个或多个,自己或他人
*/
public function activate();
}
/**
* X-超能量
*/
class XPower implements SuperModuleInterface
{
public function activate()
{
// 这只是个例子。。具体自行脑补
}
}
/**
* 终极炸弹 (就这么俗)
*/
class UltraBomb implements SuperModuleInterface
{
public function activate()
{
// 这只是个例子。。具体自行脑补
}
}
class Superman
{
public $module;
public function __construct(SuperModuleInterface $module)
{
$this->module = $module
}
}
本文从开头到现在提到的一系列依赖,只要不是由内部生产(比如初始化、构造函数 __construct
中通过工厂方法、自行手动 new 的),而是由外部以参数或其他形式注入的,都属于 依赖注入(DI)
。是不是豁然开朗?事实上,就是这么简单。下面就是一个典型的依赖注入: