PHP OOP(面向对象)进阶知识之“命名空间的层级关系/别名/实战”

1.命名空间的分层管理

代码漂亮,注释清晰易懂,所以这里就不啰嗦了。请看代码…

<?php
namespace Demo;

//命名空间的分成管理
echo '当前命名空间是:'.__NAMESPACE__.'<br>';

class Dog {}

echo Dog::class.'<hr>';




//创建一个二级命名空间
namespace Demo\one;

echo '当前的命名空间是:'.__NAMESPACE__.'<br>';

//这里的Dog类和根命名空间的Dog类是没有关联的,因为它们各自所在的命名空间的层级不一样
class Dog {}

echo Dog::class.'<br>';

//关键字:namespace 除了可以创建一个命名空间,还可以用来指定当前的命名空间,类似于类中的self
echo namespace\Dog::class.'<br>'; //访问当前空间成员


//在这个二级的命名空间中,想访问三级的命名空间中的成员,该怎么办?
echo \Demo\one\two\Dog::class,'<br>'; //方法1

echo namespace\two\Dog::class,'<hr>';  //方法2





//创建一个三级命名空间
namespace Demo\one\two;

echo '当前的命名空间是:'.__NAMESPACE__.'<br>';

class Dog {}

echo Dog::class.'<hr>';

2.使用空间别名简化命名空间

<?php
namespace Demo;

//利用空间别名来简化命名空间的名称
$className = namespace\one\two\three\Test1::class;
//echo $className::demo();
echo class_exists($className) ? $className.'类存在' : '类不存在';

echo '<hr>';

//use关键字:定义一个空间别名
use \Demo\one\two\three\Test1 as T;
echo class_exists(T::class) ? T::demo() : '类不存在';

echo '<hr>';

//use \Demo\one\two\three\Test1 as Test1;  //该写法可以简写
use Demo\one\two\three\Test1; //别名默认就是Test1,若果别名就叫'Test1'的话可以省略as了
echo class_exists(Test1::class) ? Test1::class . '类存在' : '类不存在';





//被别名的空间
namespace Demo\one\two\three;

class Test1
{
    public static function demo()
    {
//        __METHOD__:返回类的方法名
        return __METHOD__;
    }
}

class Test2
{
    public static function demo()
    {
//        __METHOD__:返回类的方法名
        return __METHOD__;
    }
}

3.命名空间的实战小案例

<?php
namespace Demo;
//命名空间实战小案例

use PDO;

//创建一个数据库接口
interface iDbparams
{
    const DSN = 'mysql:host=127.0.0.1;dbname=php';
    const USER = 'root';
    const PASS = 'a757871402';
}

//实例化
$pdo = new PDO(iDbparams::DSN,iDbparams::USER,iDbparams::PASS);

//sql语句
$sql = 'SELECT `staff_id`,`name`,`position`,`hiredate` FROM `staff` LIMIT :num OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindValue('num',5,PDO::PARAM_INT);
$stmt->bindValue('offset',0,PDO::PARAM_INT);
$stmt->execute();

//遍历
foreach ($stmt->fetchAll() as $staff) {
//    date():格式化一个时间戳,以人性化的字符串形式输出
    $hiredate = date('Y/m/d',$staff['hiredate']);
    echo "<li>{$staff['staff_id']}--{$staff['name']}--{$staff['position']}--{$hiredate}</li>";
}

数据库

-- Adminer 4.7.2 MySQL dump

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (
  `staff_id` int(3) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(30) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '25' COMMENT '年龄',
  `sex` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1:男0:女',
  `position` varchar(20) NOT NULL COMMENT '职位',
  `mobile` char(11) NOT NULL COMMENT '手机号',
  `hiredate` int(10) unsigned NOT NULL COMMENT '入职时间',
  PRIMARY KEY (`staff_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `staff` (`staff_id`, `name`, `age`, `sex`, `position`, `mobile`, `hiredate`) VALUES
(1,	'侯亮平',	43,	1,	'反贪局长',	'13576543210',	851356800),
(2,	'祁同伟',	46,	1,	'公安厅长',	'13023458765',	1420041600),
(3,	'高育良',	57,	1,	'政法书记',	'15678789933',	981734400),
(4,	'李达康',	51,	1,	'市委书记',	'13088856222',	1336838400),
(5,	'沙瑞金',	56,	1,	'省委书记',	'18956490987',	1179158400),
(6,	'赵东来',	41,	1,	'公安局长',	'15999999999',	1375891200),
(7,	'高小琴',	36,	0,	'山水庄园',	'18967678877',	1452528000),
(8,	'陈清泉',	48,	1,	'外语学霸',	'13023487666',	1320940800),
(9,	'钟小艾',	38,	0,	'反贪总局',	'13576588333',	1318348800),
(10,	'陆亦可',	35,	0,	'调查处长',	'13099912345',	1218297600),
(11,	'小龙女',	29,	0,	'古墓掌门',	'13989897754',	1378656000),
(12,	'韦小宝',	24,	1,	'太监总管',	'15709887875',	1560927140),
(13,	'郭靖',	44,	1,	'中原大侠',	'13576543422',	1560927140),
(14,	'灭绝师太',	68,	0,	'峨眉掌门',	'18909887655',	1481472000),
(15,	'李莫愁',	37,	0,	'赤炼仙子',	'13878665439',	1481472000),
(16,	'洪七公',	75,	1,	'丐帮帮主',	'13507665428',	1234567890),
(17,	'杨康',	32,	1,	'金国王爷',	'15805512348',	1560993700),
(18,	'梅超风',	49,	0,	'女魔头',	'17765443256',	1560993815),
(19,	'金轮法王',	52,	1,	'蒙古国师',	'13709887878',	1560994207),
(20,	'老顽童',	68,	1,	'全真教师叔',	'13688776548',	1560995043),
(21,	'欧阳克',	37,	1,	'大淫贼',	'19988776676',	1560993700);

待续…

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值