Java工程师 快速入手 PHP实战(三):自动加载/依赖注入

自动加载机制+反射 在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

但就实际情况而言  最好测试一下  用混的概率实在太大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值