亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 45
粉絲 3
評論 0
訪問量 56683
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
命名空間與數(shù)據(jù)庫基礎(chǔ)
殘破的蛋蛋
原創(chuàng)
2057人瀏覽過

命名空間與數(shù)據(jù)庫基礎(chǔ)

一、命名空間

1.1 命名空間的三種引入方式

命名空間名稱定義有三種:

  1. 非限定名稱:名稱中不包含命名空間分隔符,類似于計(jì)算機(jī)文件系統(tǒng)的“當(dāng)前路徑”;
  2. 限定名稱:名稱中含有命名空間分隔符,類似于計(jì)算機(jī)文件系統(tǒng)的“相對路徑”;
  3. 完全限定名稱:名稱中包含命名空間分隔符,并且是以分隔符開始的標(biāo)識(shí)符,類似于計(jì)算機(jī)文件系統(tǒng)的“絕對路徑”。
  • 命名空間引入示例:
  1. // 定義一個(gè)父空間ns1
  2. namespace ns1 {
  3. class User
  4. {
  5. }
  6. }
  7. // 定義一個(gè)子空間ns2
  8. namespace ns2 {
  9. class User
  10. {
  11. }
  12. }
  13. // 定義一個(gè)全局空間
  14. namespace one {
  15. class User
  16. {
  17. }
  18. }

以上代碼定義了三個(gè)命名空間:ns1,ns2,全局空間,并且空間下都有一個(gè)User類,那么我現(xiàn)在在父空間ns1里分別訪問不同空間下的User類需要這樣寫:

  • 訪問ns1下的User類,使用非限定名稱。
  1. echo User::class; // ns1\User
  • 訪問子空間ns2下的User類,使用限定名稱。
  1. echo ns2\User::class; // ns1\ns2\User
  • 訪問全局空間的User類,需要使用完全限定名稱。
  1. echo ns2\User::class; // ns1\ns2\User
  • 訪問全局空間的User類,需要使用完全限定名稱。
  1. echo \one\User::class; // one\User

1.2 命名空間的別名/導(dǎo)入

允許通過別名引用或?qū)胪獠康耐耆薅Q,是命名空間的一個(gè)重要特征。

PHP命名空間支持三種導(dǎo)入方式:

  1. 為類名稱使用別名;
  2. 為接口使用別名或?yàn)槊臻g名稱使用別名;
  3. PHP 5.6 開始允許導(dǎo)入函數(shù)或常量或者為它們設(shè)置別名。

在PHP中,別名是通過操作符use來實(shí)現(xiàn)的。

下面是一個(gè)導(dǎo)入示例:

  • 新建一個(gè)example.php文件
  1. // 聲明一個(gè)命名空間
  2. namespace app\admin\model;
  3. class UserModel
  4. {
  5. # TODO
  6. const cn = __CLASS__;
  7. }
  • 新建一個(gè)test.php文件

在新建的test.php文件中調(diào)用example.php中的UserModel類,通常的做法是:

  1. namespace app\controllers;
  2. // 引入example.php文件
  3. require 'example.php';
  4. // 實(shí)例化example.php中的UserModel類
  5. $user = new \app\admin\model\UserModel;

但是我們?nèi)绻啻问褂?code>UserModel類,總不能每次都要寫一個(gè)完整的完全限定名稱來導(dǎo)入類,這樣就太繁瑣了,因此我們可以使用別名來導(dǎo)入類,之后直接使用別名即可。

  1. // 導(dǎo)入空間別名,來簡化類的名稱
  2. use \app\admin\model\UserModel as UserModel;
  3. // 實(shí)例化example.php中的UserModel類
  4. $user = new UserModel;

事實(shí)上,使用use導(dǎo)入的默認(rèn)就是一個(gè)完全限定名稱的類,因此可以去掉空間操作符“\”,寫成下面這種方法:

  1. use app\admin\model\UserModel as UserModel;

app前面的“\”可以省略掉。

如果別名與原始的類名相同,此時(shí)可以省略as后面的內(nèi)容。

  1. use app\admin\model\UserModel;
  2. $user = new UserModel;

請思考這么一個(gè)問題:如果當(dāng)前空間的類名與導(dǎo)入的空間的類名相同,應(yīng)該怎么辦?

那么,此時(shí),類別名就不能與當(dāng)前空間的類名相同了,并且類名別也不可省略。

  • 示例:

為當(dāng)前test.php腳本添加一個(gè)UserModel類。

  1. namespace app\controllers;
  2. // 引入example.php文件
  3. require 'example.php';
  4. // 此時(shí)就不能省略別名了,并且別名不能與當(dāng)前空間的類名沖突。
  5. use app\admin\model\UserModel as User;
  6. // 實(shí)例化explame.php腳本中的UserModel類
  7. $user = new User;
  8. // 當(dāng)前腳本的UserModel類
  9. class UserModel
  10. {
  11. # TODO
  12. }
  13. $user = new UserModel;

1.3 空間成員的訪問優(yōu)先級

在一個(gè)命名空間中,當(dāng) PHP 遇到一個(gè)非限定的類、函數(shù)或常量名稱時(shí),它使用不同的優(yōu)先策略來解析該名稱。

1.3.1 示例:在空間中訪問全局類

  1. namespace ns {
  2. // $obj = new Demo; // 報(bào)錯(cuò)
  3. $obj = new \Demo; // 正確
  4. }
  5. namespace {
  6. class Demo
  7. {
  8. }
  9. }

優(yōu)先級

結(jié)論:類名稱總是解析到當(dāng)前命名空間中的名稱,并不會(huì)去全局查找,因此在訪問外部空間類的時(shí)候,必須使用完全限定名稱。

1.3.2 示例:在空間中訪問函數(shù)

  1. namespace ns {
  2. function hello () {
  3. echo "Hello World!";
  4. }
  5. echo hello(); // Hello World!
  6. }
  7. namespace {
  8. function hello()
  9. {
  10. return __FUNCTION__;
  11. }
  12. }

結(jié)論:在訪問函數(shù)時(shí),如果當(dāng)前空間不存在該函數(shù),就會(huì)自動(dòng)去全局查找,如果存在,就直接調(diào)用當(dāng)前空間內(nèi)的函數(shù)。

1.3.3 示例:在空間中訪問常量

  1. namespace ns {
  2. echo STR_PAD_RIGHT; // 1
  3. }
  4. namespace {
  5. }

結(jié)論:在訪問常量時(shí),如果當(dāng)前空間不存在該常量,就會(huì)自動(dòng)去全局查找,如果存在,就直接調(diào)用當(dāng)前空間內(nèi)的常量。

1.4 利用命名空間的知識(shí)實(shí)現(xiàn)一個(gè)自動(dòng)加載器

1.創(chuàng)建一個(gè)明文app的文件夾,并在其下創(chuàng)建一個(gè)名為model的子文件夾,該文件夾下有兩個(gè)類文件:StaffsModel.phpUsersModel.php

  • StaffsModel.php
  1. namespace app\model;
  2. class StaffsModel
  3. {
  4. }
  • UsersModel.php
  1. namespace app\model;
  2. class UsersModel
  3. {
  4. }

在app文件夾下創(chuàng)建一個(gè)autoload.php的文件,里面存放自動(dòng)加載器:

  1. spl_autoload_register(function ($class) {
  2. $file = str_replace('\\', DIRECTORY_SEPARATOR) . '.php';
  3. require $file;
  4. });

創(chuàng)建一個(gè)example.php文件,用來調(diào)用上面的兩個(gè)類:

  1. namespace app;
  2. // 引入類
  3. use app\model\StaffsModel;
  4. use app\model\UsersModel;
  5. // 引入自動(dòng)加載器
  6. require 'app/autoload.php';
  7. $staffs = new StaffsModel;
  8. $users = new UsersModel;
  9. var_dump($staffs, $users);

二、MySQL基礎(chǔ)命令

2.1 管理工具

  • 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ù)庫。

2.2 數(shù)據(jù)庫的連接與退出

2.2.1 查詢版本

  • mysql -V

2.2.2 連接數(shù)據(jù)庫

完整命令:

  • mysql -h 主機(jī)地址 -P 3306 -u 賬戶名 -p 密碼 -D mysql

簡寫:

  • mysql -u 賬戶名 -p 密碼

2.3 sql 語句分類

  • DDL: 數(shù)據(jù)定義, create, alter,drop
  • DML: 數(shù)據(jù)操作, insert, update,delete,select,(CURD)
  • DCL: 數(shù)據(jù)控制, grant, revoke
  • TCL: 事件控制, commit, rollback

2.4 數(shù)據(jù)庫操作

  1. -- 創(chuàng)建數(shù)據(jù)庫
  2. CREATE DATABASE 數(shù)據(jù)庫名稱 COLLATE unf8mb4_unicode_ci;
  3. -- 選擇默認(rèn)數(shù)據(jù)庫
  4. USE phpedu;
  5. -- 查看建庫語句
  6. SHOW CREATE DATABASE 數(shù)據(jù)庫名稱;
  7. -- 狀態(tài)
  8. STATUS
  9. -- 刪庫
  10. DROP DATABASE 數(shù)據(jù)庫名稱;

2.5 數(shù)據(jù)表操作

  1. -- 創(chuàng)建數(shù)據(jù)表
  2. CREATE TABLE users(
  3. uid INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  4. name VARCHAR(20) NOT NULL COMMENT '姓名',
  5. gender ENUM('male', 'female') COMMENT '性別',
  6. email VARCHAR(50) NOT NULL COMMENT '郵箱',
  7. birthday DATE NOT NULL COMMENT '生日',
  8. create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建日期',
  9. update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改日期'
  10. ) ENGINE = INNODB AUTO_INCREMENT=1 COLLATE=utf8mb4_unicode_ci;
  11. -- 查看表結(jié)構(gòu)
  12. DESC users;
  13. -- 查看建表語句
  14. SHOW CREATE TABLE users;
  15. -- 查看數(shù)據(jù)庫中的所有表
  16. SHOW TABLES;
  17. -- 修改表
  18. -- 1.增加字段:add
  19. -- ALTER TABLE 表名 ADD 字段名 字段類型 是否為空 默認(rèn)值 AFTER 字段名;
  20. ALTER TABLE users ADD salary INT UNSIGNED NOT NULL DEFAULT 2000 AFTER gender;
  21. -- 2.更新字段:change
  22. -- ALTER TALBE 表名 CHANGE 原始字段名 修改后的字段名 INT UNDIGNED NOT NULL DEFAULT 2000 AFTER 某個(gè)字段;
  23. ALTER TABLE users CHANGE salary salary INT UNSIGNED NOT NULL DEFAULT 2000 AFTER gender;
  24. ALTER TABLE users CHANGE gender gender ENUM('male', 'female') NOT NULL AFTER name;
  25. ALTER TABLE users CHANGE salary salary FLOAT UNSIGNED NOT NULL DEFAULT 3000 AFTER gender;
  26. -- 3.刪除字段:drop
  27. -- ALTER TABLE 表名 DROP 字段名;
  28. ALTER TABLE users DROP test;

2.6 增刪改查(CURD)

  1. -- 插入數(shù)據(jù):insert/insert into
  2. INSERT INTO users (name, gender, email, birthday) VALUES('殘破的蛋蛋', 'male', 'admin@admin.cn', '1990-03-31');
  3. -- 插入單條數(shù)據(jù),還可以這樣操作
  4. INSERT INTO users SET name='拤碎的蛋蛋', gender='female', salary=4500, email='q@admin.cn', birthday='1991-04-26';
  5. -- 批量插入多條數(shù)據(jù)
  6. INSERT INTO users (name, gender, salary, email, birthday) VALUES
  7. ('king','male',6500,'king@php.cn','1992-10-29'),
  8. ('amy','female',7800,'amy@163.com','1998-10-22'),
  9. ('betty','female',9800,'betty@qq.com','1953-10-19'),
  10. ('jack','male',12500,'jack@php.cn', '1977-10-24'),
  11. ('marry','female',15800,'marry@php.cn', '1990-01-08'),
  12. ('alice','female',8600,'alice@php.cn','1989-09-18'),
  13. ('admin','male',16600,'admin@php.cn','1989-09-18'),
  14. ('lisa','female',13500,'lisa@qq.com','1983-09-13'),
  15. ('peter','male',9600,'peter@163.com','1993-09-29'),
  16. ('linda','female',5600,'linda@163.com','1993-09-29');
  17. -- 子查詢式插入/復(fù)制插入
  18. INSERT INTO users (name, gender, salary, email, birthday)
  19. (SELECT name, gender, salary, email, birthday FROM users);
  20. -- 更新 update
  21. -- 增加一個(gè)年齡字段
  22. ALTER TABLE users ADD age INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡' AFTER name;
  23. UPDATE users SET age=timestampdiff(year, birthday, now());
  24. UPDATE users SET salary= salary + 1000 where uid=1;
  25. -- 刪除
  26. DELETE FROM users where id=1;
  27. -- ALTER TABLE 表名 AUTO_INCREMENT = n n表示自增的起始值)
  28. -- 清空表
  29. TRUNCATE test;
批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報(bào)處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)