自动加载机制+反射 在PHP的表现
? ? ? ? 为什么需要自动加载?PHP在执行动态方法时 调用的代码组件是动态的不确定的 需要自动匹配。
? ? ? ? 为什么需要反射?个人认为PHP反射是自动加载的一个补充,可以动态获取类的属性方法注结 方便程序的拓展。
? ? ? ? ?PHP是脚本语言? ?Java是编译性语言? 可以理解为自动加载就是这个特性导致的,用起来感觉跟反射很像,
? ? ? ? 反射 是框架都会用到的机制 尤其是Java;
? ? ? ? 想声明一个实体类 Person.php
<?php
class Person
{
public $name = null;
public $age = 18;
public function intro(){
print "My name is ".$this->name.",I'm ".$this->age." years old.";
}
}
??spl_autoload_register函数使用 SplDemo.php
<?php
spl_autoload_register('autoloadClass',true,true);
function autoloadClass($className=""){
echo $className.'=============';
include "./{$className}.php";
}
$p = new Person();
$p->name = '张三';
$p->age=18;
$p->intro();
??在来看看反射ReflectionDemo.php? ? ??
<?php
// 需要手动加载
require 'Person.php';
$p = new \ReflectionClass("Person");
$pobj = $p->newInstance();
$pobj->name = "李四";
$pobj->age = 100;
$pobj->intro();
混合自动加载SplReflectionDemo.php
spl_autoload_register('autoloadClass',true,true);
function autoloadClass($className=""){
echo $className.'=============';
include "./{$className}.php";
}
$p = new \ReflectionClass("Person");
$pobj = $p->newInstance();
$pobj->name = "李四";
$pobj->age = 100;
$pobj->intro();
依赖注入与Java的不同 不必须声明一个接口
在Java Spring框架中 通常会有业务层/持久层/控制层相互依赖 比如在IUserService 中声明IUserRespository userDao 属性对其接口实现进行应用依赖? 但如果把接口作为一个方法 工厂模式下,令人费解的事情就发生了??
<?php
require "OperPlus.php";
require "OperMinus.php";
// 利用工厂方法动态调用类
function oper($obj,$n1,$n2){
return $obj->oper($n1,$n2);
}
$plus = new OperPlus();
$minus = new OperMinus();
echo "加法运算结果:".oper($plus,1,1);
echo "<br/>减法法运算结果:".oper($minus,1,1);
看下操作类的定义??就是这么不严谨 你能怎么样?
/**
* 加法运算
*/
class OperPlus
{
public function oper($n1,$n2){
// return $n1+$n2;
return bcadd($n1,$n2);
}
}
/**
* 减法运算
*/
class OperMinus
{
public function oper($n1,$n2){
// return $n1-$n2;
return bcsub($n1,$n2);
}
}
?
PHP基础 empty is_array isset? is_null和逻辑if的用法理解
?if 空字符? null 空变量 空数组 0 false 都是false;
empty? 除了 true false 同上
isset 判断变量是否存在? 空字符? 空数组 返回true ,null 空变量 返回false
但就实际情况而言? 最好测试一下? 用混的概率实在太大。
|