批改状态:合格
老师批语:
命名空间名称定义有三种:
// 定义一个父空间ns1namespace ns1 {class User{}}// 定义一个子空间ns2namespace ns2 {class User{}}// 定义一个全局空间namespace one {class User{}}
以上代码定义了三个命名空间:ns1,ns2,全局空间,并且空间下都有一个User类,那么我现在在父空间ns1里分别访问不同空间下的User类需要这样写:
echo User::class; // ns1\User
echo ns2\User::class; // ns1\ns2\User
echo ns2\User::class; // ns1\ns2\User
echo \one\User::class; // one\User
允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。
PHP命名空间支持三种导入方式:
在PHP中,别名是通过操作符
use来实现的。
下面是一个导入示例:
// 声明一个命名空间namespace app\admin\model;class UserModel{# TODOconst cn = __CLASS__;}
在新建的test.php文件中调用example.php中的UserModel类,通常的做法是:
namespace app\controllers;// 引入example.php文件require 'example.php';// 实例化example.php中的UserModel类$user = new \app\admin\model\UserModel;
但是我们如果要多次使用UserModel类,总不能每次都要写一个完整的完全限定名称来导入类,这样就太繁琐了,因此我们可以使用别名来导入类,之后直接使用别名即可。
// 导入空间别名,来简化类的名称use \app\admin\model\UserModel as UserModel;// 实例化example.php中的UserModel类$user = new UserModel;
事实上,使用use导入的默认就是一个完全限定名称的类,因此可以去掉空间操作符“\”,写成下面这种方法:
use app\admin\model\UserModel as UserModel;
app前面的“\”可以省略掉。
如果别名与原始的类名相同,此时可以省略as后面的内容。
use app\admin\model\UserModel;$user = new UserModel;
请思考这么一个问题:如果当前空间的类名与导入的空间的类名相同,应该怎么办?
那么,此时,类别名就不能与当前空间的类名相同了,并且类名别也不可省略。
为当前test.php脚本添加一个UserModel类。
namespace app\controllers;// 引入example.php文件require 'example.php';// 此时就不能省略别名了,并且别名不能与当前空间的类名冲突。use app\admin\model\UserModel as User;// 实例化explame.php脚本中的UserModel类$user = new User;// 当前脚本的UserModel类class UserModel{# TODO}$user = new UserModel;
在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。
namespace ns {// $obj = new Demo; // 报错$obj = new \Demo; // 正确}namespace {class Demo{}}

结论:类名称总是解析到当前命名空间中的名称,并不会去全局查找,因此在访问外部空间类的时候,必须使用完全限定名称。
namespace ns {function hello () {echo "Hello World!";}echo hello(); // Hello World!}namespace {function hello(){return __FUNCTION__;}}
结论:在访问函数时,如果当前空间不存在该函数,就会自动去全局查找,如果存在,就直接调用当前空间内的函数。
namespace ns {echo STR_PAD_RIGHT; // 1}namespace {}
结论:在访问常量时,如果当前空间不存在该常量,就会自动去全局查找,如果存在,就直接调用当前空间内的常量。
1.创建一个明文app的文件夹,并在其下创建一个名为model的子文件夹,该文件夹下有两个类文件:StaffsModel.php和UsersModel.php:
namespace app\model;class StaffsModel{}
namespace app\model;class UsersModel{}
在app文件夹下创建一个autoload.php的文件,里面存放自动加载器:
spl_autoload_register(function ($class) {$file = str_replace('\\', DIRECTORY_SEPARATOR) . '.php';require $file;});
创建一个example.php文件,用来调用上面的两个类:
namespace app;// 引入类use app\model\StaffsModel;use app\model\UsersModel;// 引入自动加载器require 'app/autoload.php';$staffs = new StaffsModel;$users = new UsersModel;var_dump($staffs, $users);
Adminer:超轻量级,单文件版本的 Web 版的数据库管理工具。
Navicat Preminum:是一套多连接数据库开发工具,让你在单一应用程序中同时连接多达七种数据库:MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL,可一次快速方便地访问所有数据库。
完整命令:
简写:
-- 创建数据库CREATE DATABASE 数据库名称 COLLATE unf8mb4_unicode_ci;-- 选择默认数据库USE phpedu;-- 查看建库语句SHOW CREATE DATABASE 数据库名称;-- 状态STATUS-- 删库DROP DATABASE 数据库名称;
-- 创建数据表CREATE TABLE users(uid INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL COMMENT '姓名',gender ENUM('male', 'female') COMMENT '性别',email VARCHAR(50) NOT NULL COMMENT '邮箱',birthday DATE NOT NULL COMMENT '生日',create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期') ENGINE = INNODB AUTO_INCREMENT=1 COLLATE=utf8mb4_unicode_ci;-- 查看表结构DESC users;-- 查看建表语句SHOW CREATE TABLE users;-- 查看数据库中的所有表SHOW TABLES;-- 修改表-- 1.增加字段:add-- ALTER TABLE 表名 ADD 字段名 字段类型 是否为空 默认值 AFTER 字段名;ALTER TABLE users ADD salary INT UNSIGNED NOT NULL DEFAULT 2000 AFTER gender;-- 2.更新字段:change-- ALTER TALBE 表名 CHANGE 原始字段名 修改后的字段名 INT UNDIGNED NOT NULL DEFAULT 2000 AFTER 某个字段;ALTER TABLE users CHANGE salary salary INT UNSIGNED NOT NULL DEFAULT 2000 AFTER gender;ALTER TABLE users CHANGE gender gender ENUM('male', 'female') NOT NULL AFTER name;ALTER TABLE users CHANGE salary salary FLOAT UNSIGNED NOT NULL DEFAULT 3000 AFTER gender;-- 3.删除字段:drop-- ALTER TABLE 表名 DROP 字段名;ALTER TABLE users DROP test;
-- 插入数据:insert/insert intoINSERT INTO users (name, gender, email, birthday) VALUES('残破的蛋蛋', 'male', 'admin@admin.cn', '1990-03-31');-- 插入单条数据,还可以这样操作INSERT INTO users SET name='拤碎的蛋蛋', gender='female', salary=4500, email='q@admin.cn', birthday='1991-04-26';-- 批量插入多条数据INSERT INTO users (name, gender, salary, email, birthday) VALUES('king','male',6500,'king@php.cn','1992-10-29'),('amy','female',7800,'amy@163.com','1998-10-22'),('betty','female',9800,'betty@qq.com','1953-10-19'),('jack','male',12500,'jack@php.cn', '1977-10-24'),('marry','female',15800,'marry@php.cn', '1990-01-08'),('alice','female',8600,'alice@php.cn','1989-09-18'),('admin','male',16600,'admin@php.cn','1989-09-18'),('lisa','female',13500,'lisa@qq.com','1983-09-13'),('peter','male',9600,'peter@163.com','1993-09-29'),('linda','female',5600,'linda@163.com','1993-09-29');-- 子查询式插入/复制插入INSERT INTO users (name, gender, salary, email, birthday)(SELECT name, gender, salary, email, birthday FROM users);-- 更新 update-- 增加一个年龄字段ALTER TABLE users ADD age INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄' AFTER name;UPDATE users SET age=timestampdiff(year, birthday, now());UPDATE users SET salary= salary + 1000 where uid=1;-- 删除DELETE FROM users where id=1;-- ALTER TABLE 表名 AUTO_INCREMENT = n (n表示自增的起始值)-- 清空表TRUNCATE test;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号