博主信息
超超多喝水
博文
32
粉丝
0
评论
0
访问量
2265
积分:0
P豆:64

命名空间自动加载进阶与mysql初体验

2021年08月22日 09:38:33阅读数:101博客 / 超超多喝水/ PHP学习

类是php四大全局成员(常量 函数 类 接口)中的一员,全局成员有着不受作用域限制的优势,同时也存在名称唯一的限制。

命名空间的出现就能很好的去解决这个唯一命名的问题。

命名空间可以起到一个命名化块的作用,命名空间的命名可以随意起,但是一般建议跟目录一致,命名空间的命名规则参考变量的命名规则,不能是数字开头,不能是内部函数,且需要写在除declare指令外的第一行(注释不算在内)。

命名空间的两种写法:

namespace ns1;

namespace ns1{}

其中全局空间写做:

namespace{}

但是这里需要注意,如果用namespace ns1;的形式就必须所有命名空间都用namespace ns1;的形式,如果用namespace ns1{}的形式就必须所有命名空间都用namespace ns1{}的形式。

下面将autoload.php自动加载做一个命名空间版本的升级:

实例

<?php

//类的自动加载
spl_autoload_register(function($className)
{
    // echo $className;//可以先echo一下检查下要加载的类
    // echo '<hr>';
    //将类的命名空间与类文件所在的路径保持一一映射
    $file = __DIR__.str_replace('\\',DIRECTORY_SEPARATOR,('\..\..\\'.$className)).'.php';//绝对路径方式获取$file地址
    // $file = str_replace('\\',DIRECTORY_SEPARATOR,$className).'.php';//相对路径方式获取$file地址
    // echo $file;//地址错误的情况下,可以检查下地址的内容
    //判断$file是否是已存在的文件夹
    if(!is_file($file)&&file_exists($file))
    {
            //如果不是则抛出错误
        throw new \Exception('文件名不合法或不存在');
    }
    //没问题则引入$file的地址
    require $file;
});

运行实例 »

点击 "运行实例" 按钮查看在线实例

以下面的文件做为测试:

  • Demo(文件夹)

    • app(文件夹)

      • admin(文件夹)

        • controller(文件夹)

          • Login.php(php文件)代码:

          • <?php
            namespace app\admin\controller;
            
            class Login
            {
            
            }
          • User.php(php文件)

          • <?php
            namespace app\admin\controller;
            //控制器 在User控制器文件中  使用User模型文件
            use app\admin\model\User as UserModel;
            
            class User
            {
                public function index()
                {
                    return UserModel::getInfo();
                }
            }
        • model(文件夹)

          • Login.php(php文件)

          • <?php
            namespace app\admin\model;
            
            class Login
            {
                
            }
          • User.php(php文件)

          • <?php
            namespace app\admin\model;
            class User
            {
                static function getInfo()
                {
                    return '获取到用户信息';
                }
            }
        • autoload.php(php文件,代码参考上文)

  • demo.php(php文件)

  • <?php
    //引入类的自动加载器
    require 'app/admin/autoload.php';
    //通过命名空间引入各个类文件,其中遇到重名的需要用as进行重命名的处理操作
    use app\admin\controller\Login;
    use app\admin\controller\User;
    use app\admin\model\Login as LoginModel;
    use app\admin\model\User as UserModel;
    //将所有引入的类进行实例化
    $loginController = new Login;
    $UserController = new User;
    $loginModel = new LoginModel;
    $UserModel = new UserModel;
    //调用User类中的index()
    echo $UserController->index();

正常输出:获取到用户信息。

_TSUL(0@NDEBAVE%AW8%H9D.png

msql初体验

sql语句四种分类:

数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL

DQL:基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>。

DML:用来对数据库进行操作,常用的如:查询:SELECT,插入:INSERT,更新:UPDATE,删除:DELETE,即增删改查中的增删查改

DDL:主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,一般主要在建立表时使用。

DCL:数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。

批改老师:PHPzhongPHPzhong

批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论