
批改狀態(tài):合格
老師批語:
命名空間名稱定義有三種:
// 定義一個(gè)父空間ns1
namespace ns1 {
class User
{
}
}
// 定義一個(gè)子空間ns2
namespace ns2 {
class User
{
}
}
// 定義一個(gè)全局空間
namespace one {
class User
{
}
}
以上代碼定義了三個(gè)命名空間:ns1,ns2,全局空間,并且空間下都有一個(gè)User
類,那么我現(xiàn)在在父空間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
允許通過別名引用或?qū)胪獠康耐耆薅Q,是命名空間的一個(gè)重要特征。
PHP命名空間支持三種導(dǎo)入方式:
在PHP中,別名是通過操作符
use
來實(shí)現(xiàn)的。
下面是一個(gè)導(dǎo)入示例:
// 聲明一個(gè)命名空間
namespace app\admin\model;
class UserModel
{
# TODO
const cn = __CLASS__;
}
在新建的test.php文件中調(diào)用example.php中的UserModel類,通常的做法是:
namespace app\controllers;
// 引入example.php文件
require 'example.php';
// 實(shí)例化example.php中的UserModel類
$user = new \app\admin\model\UserModel;
但是我們?nèi)绻啻问褂?code>UserModel類,總不能每次都要寫一個(gè)完整的完全限定名稱來導(dǎo)入類,這樣就太繁瑣了,因此我們可以使用別名來導(dǎo)入類,之后直接使用別名即可。
// 導(dǎo)入空間別名,來簡化類的名稱
use \app\admin\model\UserModel as UserModel;
// 實(shí)例化example.php中的UserModel類
$user = new UserModel;
事實(shí)上,使用use
導(dǎo)入的默認(rèn)就是一個(gè)完全限定名稱的類,因此可以去掉空間操作符“\”,寫成下面這種方法:
use app\admin\model\UserModel as UserModel;
app前面的“\”可以省略掉。
如果別名與原始的類名相同,此時(shí)可以省略as
后面的內(nèi)容。
use app\admin\model\UserModel;
$user = new UserModel;
請思考這么一個(gè)問題:如果當(dāng)前空間的類名與導(dǎo)入的空間的類名相同,應(yīng)該怎么辦?
那么,此時(shí),類別名就不能與當(dāng)前空間的類名相同了,并且類名別也不可省略。
為當(dāng)前test.php腳本添加一個(gè)UserModel
類。
namespace app\controllers;
// 引入example.php文件
require 'example.php';
// 此時(shí)就不能省略別名了,并且別名不能與當(dāng)前空間的類名沖突。
use app\admin\model\UserModel as User;
// 實(shí)例化explame.php腳本中的UserModel類
$user = new User;
// 當(dāng)前腳本的UserModel類
class UserModel
{
# TODO
}
$user = new UserModel;
在一個(gè)命名空間中,當(dāng) PHP 遇到一個(gè)非限定的類、函數(shù)或常量名稱時(shí),它使用不同的優(yōu)先策略來解析該名稱。
namespace ns {
// $obj = new Demo; // 報(bào)錯(cuò)
$obj = new \Demo; // 正確
}
namespace {
class Demo
{
}
}
結(jié)論:類名稱總是解析到當(dāng)前命名空間中的名稱,并不會(huì)去全局查找,因此在訪問外部空間類的時(shí)候,必須使用完全限定名稱。
namespace ns {
function hello () {
echo "Hello World!";
}
echo hello(); // Hello World!
}
namespace {
function hello()
{
return __FUNCTION__;
}
}
結(jié)論:在訪問函數(shù)時(shí),如果當(dāng)前空間不存在該函數(shù),就會(huì)自動(dòng)去全局查找,如果存在,就直接調(diào)用當(dāng)前空間內(nèi)的函數(shù)。
namespace ns {
echo STR_PAD_RIGHT; // 1
}
namespace {
}
結(jié)論:在訪問常量時(shí),如果當(dāng)前空間不存在該常量,就會(huì)自動(dòng)去全局查找,如果存在,就直接調(diào)用當(dāng)前空間內(nèi)的常量。
1.創(chuàng)建一個(gè)明文app的文件夾,并在其下創(chuàng)建一個(gè)名為model的子文件夾,該文件夾下有兩個(gè)類文件:StaffsModel.php
和UsersModel.php
:
namespace app\model;
class StaffsModel
{
}
namespace app\model;
class UsersModel
{
}
在app文件夾下創(chuàng)建一個(gè)autoload.php
的文件,里面存放自動(dòng)加載器:
spl_autoload_register(function ($class) {
$file = str_replace('\\', DIRECTORY_SEPARATOR) . '.php';
require $file;
});
創(chuàng)建一個(gè)example.php文件,用來調(diào)用上面的兩個(gè)類:
namespace app;
// 引入類
use app\model\StaffsModel;
use app\model\UsersModel;
// 引入自動(dòng)加載器
require 'app/autoload.php';
$staffs = new StaffsModel;
$users = new UsersModel;
var_dump($staffs, $users);
Adminer:超輕量級,單文件版本的 Web 版的數(shù)據(jù)庫管理工具。
Navicat Preminum:是一套多連接數(shù)據(jù)庫開發(fā)工具,讓你在單一應(yīng)用程序中同時(shí)連接多達(dá)七種數(shù)據(jù)庫:MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL,可一次快速方便地訪問所有數(shù)據(jù)庫。
完整命令:
簡寫:
-- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名稱 COLLATE unf8mb4_unicode_ci;
-- 選擇默認(rèn)數(shù)據(jù)庫
USE phpedu;
-- 查看建庫語句
SHOW CREATE DATABASE 數(shù)據(jù)庫名稱;
-- 狀態(tài)
STATUS
-- 刪庫
DROP DATABASE 數(shù)據(jù)庫名稱;
-- 創(chuàng)建數(shù)據(jù)表
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 '創(chuàng)建日期',
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期'
) ENGINE = INNODB AUTO_INCREMENT=1 COLLATE=utf8mb4_unicode_ci;
-- 查看表結(jié)構(gòu)
DESC users;
-- 查看建表語句
SHOW CREATE TABLE users;
-- 查看數(shù)據(jù)庫中的所有表
SHOW TABLES;
-- 修改表
-- 1.增加字段:add
-- ALTER TABLE 表名 ADD 字段名 字段類型 是否為空 默認(rèn)值 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 某個(gè)字段;
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;
-- 插入數(shù)據(jù):insert/insert into
INSERT INTO users (name, gender, email, birthday) VALUES('殘破的蛋蛋', 'male', 'admin@admin.cn', '1990-03-31');
-- 插入單條數(shù)據(jù),還可以這樣操作
INSERT INTO users SET name='拤碎的蛋蛋', gender='female', salary=4500, email='q@admin.cn', birthday='1991-04-26';
-- 批量插入多條數(shù)據(jù)
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');
-- 子查詢式插入/復(fù)制插入
INSERT INTO users (name, gender, salary, email, birthday)
(SELECT name, gender, salary, email, birthday FROM users);
-- 更新 update
-- 增加一個(gè)年齡字段
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;
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)