• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

面向对象编程(四)netbeans、 反射 Reflection、 命名空间、 异常处理、 类、 类别名

Mr.Lee 由 Mr.Lee
2018年5月18日
在 PHP, 面向对象, 面向对象编程
0
面向对象编程(四)netbeans、 反射 Reflection、 命名空间、 异常处理、 类、 类别名
0
分享
0
浏览

面向对象编程(四)

命名空间

命名空间介绍

如果一个项目很大,项目中由很多文件组成,如何有序的组织这些文件就是一个大问题,PHP提供了命名空间来解决。

多学一招:

C#语言中也是通过“命名空间”来解决的

Java语言通过“包”来解决的。

命名空间的声明与使用

通过namespace来声明命名空间

多级命名空间

<?php

namespace China\ShangHai\PuDong; //多级命名空间

function getInfo() {

echo ‘我是中国人<br>’;

}

namespace USA\Washington;

function getInfo() {

echo ‘I am a America<br>’;

}

//调用

header(‘Content-Type:text/html;charset=utf-8’);

getInfo(); //I am a America

\China\ShangHai\PuDong\getInfo(); //我是中国人

访问空间元素的三种方法

  1. 非限定名称访问(类似于相对路径)
  2. 完全限定名称访问(绝对路径)
  3. 【部分】限定名称访问(相对路径)

引入命名空间(use)

分析:PuDong\getInfo()如何调用的?

第一步:通过命名空间拼接,拼接成\ USA\Washington\ PuDong\getInfo(),但是在这个地址下找不到此函数,所以继续执行第二步

第二步:由于引入了China\ShangHai\PuDong命名空间,又可以拼接成China\ShangHai\PuDong\ getInfo(),这个地址是可以找到函数的,所以调用此函数。

引入类(use)

通过use关键字引入类

给类取别名(as)

如果引入的类和已经存在的类同名,就会报错,我们可以引入类的同时给类取别名

<?php

namespace China\ShangHai\PuDong;

class Person {

public $name=’中国人’;

}

namespace USA\Washington;

class Person{

public $name=’美国人’;

}

header(‘Content-Type:text/html;charset=utf-8’);

use China\ShangHai\PuDong\Person as P; //引入类,并给类取别名

$person=new P();

echo $person->name; //中国人

公共命名空间

如果PHP文件中没有namespace关键字声明,该文件的元素都在“公共命名空间”下,访问公共命名空间用“\”。

命名空间的注意事项

  1. 命名空间中可以放函数,类,const常量


  1. 在第一个namespace之前不能有任何的代码,header()也不行。

  1. 包含文件不能改变当前的命名空间

用文件的地址做命名空间,通过命名空间就可以实现自动加载类

  1. 在Framework/Core文件夹下创建Student.class.php

<?php

namespace Framework\Core;

class Student {

public function show() {

echo ‘Core\Student\show()<br>’;

}

}

  1. 在Framework/Lib文件夹下创建Student.class.php

<?php

namespace Framework\Lib;

class Student {

public function show() {

echo ‘Lib\Student\show()<br>’;

}

}

  1. 在php中通过命名空间实现自动加载类

异常处理(Exception)

使用的关键字

try:检测代码中的异常

catch:捕获抛出的异常

throw:抛出异常

Exception:PHP内置的异常类

Exception异常类中的方法

Exception是基础异常类,该类提供了一些方法

方法

描述

getMessage()

获取异常中的错误信息

getCode()

获取异常的编码

getFile()

产生异常的文件路径

getLine()

产生异常的行号

异常的例题

自定义异常,捕获多个异常

PHP只提供了异常类,没有提供具体的某种异常,比如年龄异常,邮件异常等。

自定义异常必须继承Exception类,Exception类是所有异常类的父类。

<?php

//空异常

class NullException extends Exception {

}

//年龄异常

class AgeException extends Exception {

}

if(isset($_POST[‘button’])) {

$name=$_POST[‘name’];

$age=$_POST[‘age’];

try

{

if($name==”)

throw new NullException(‘姓名不能为空’); //抛出空异常

if($age==”)

throw new NullException(‘年龄不能为空’); //抛出空异常

if(!($age>=10 && $age<=20))

throw new AgeException(‘年龄必须在10-20之间’); //抛出年龄异常

}

catch(NullException $e)

{

echo $e->getMessage();

}

catch(AgeException $e)

{

echo $e->getMessage();

}

catch(Exception $e){ //必须放在所有的catch的最后

echo $e->getMessage();

}

}

?>

<form method=”post” action=””>

姓名: <input type=”text” name=”name”> <br />

年龄: <input type=”text” name=”age”> <br />

<input type=”submit” name=”button” value=”提交”>

</form>

介绍netbeans

安装netbeans

在安装netbeans之前必须先安装jdk(java开发包)

安装JDK后,再下一步,下一步安装netbeans.。

使用netbeans

双击netbeans图标

继续如下操作



创建完毕后,在虚拟目录的文件夹中多了一个“nbproject”文件夹,此文件夹用来让netbeans软件管理虚拟目录的,不是项目文件夹。在最后项目上传到服务器的时候要将此文件夹删除。

反射(Reflection)

反射的概念

程序可以访问、检测和修改它本身状态或行为的一种能力

反射的作用

获取对象对应的类中的属性,方法,参数,注释等封闭的信息,主要用来了解类、方法等内部结构。

反射的分类

了解如下几个反射类即可。

使用反射类(了解内容)

通过反射了解类的内部结构

语法:

ReflectionClass::export(类名);

例题

通过上面的例题可以得出结论,PHP最顶层的父类是一个空类,代码

class stdClass{

}

通过反射获取类中的属性、方法、常量

<?php

class Student{

const PI=3.14;

public $name=’tom’;

private $sex=’f’;

public function show(){

}

}

//通过反射获取类中的成员

$info= new ReflectionClass(‘Student’); //实例化反射类对象,此对象中包含了Student类中的信息

//获取常量信息

$const=$info->getConstants(); //获取所有常量,返回常量数组

$const=$info->getConstant(‘PI’); //获取PI常量

//获取方法信息

$method=$info->getMethods(); //获取所有方法,返回方法信息数组

$method=$info->getMethod(‘show’); //获取show()方法信息

//获取属性信息

$propty=$info->getProperties(); //获取所有属性信息

$propty=$info->getProperty(‘sex’); //获取sex属性

var_dump($propty);

通过反射实例化对象

newInstance()就是用来实例化对象,构造函数需要几个参数,就通过newInstance()传递几个参数。

通过反向代理调用类方法

正向代理:局域网中所有电脑通过服务器访问外网,局域网中电脑感受到服务器的存在,这种代理是正向代理

反向代理

将上面的理论平移到反射中来

A调用A的方法:正向代理

通过反射,A调用B的方法:反向代理

标签: netbeans反射 Reflection命名空间异常处理类类别名
上一篇文章

PHP 核心编程(一)文件上传、 表单传值、 验证文件类型

下一篇文章

面向对象编程(三)Clone、 foreach 遍历对象、 三私一公、 单例模式、 单例模式封装 MyPDO、 工厂模式、 序列化反序列化、 策略模式、 自动加载类、 迭代器、 魔术方法

下一篇文章
面向对象编程(四)netbeans、 反射 Reflection、 命名空间、 异常处理、 类、 类别名

面向对象编程(三)Clone、 foreach 遍历对象、 三私一公、 单例模式、 单例模式封装 MyPDO、 工厂模式、 序列化反序列化、 策略模式、 自动加载类、 迭代器、 魔术方法

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3