目录:
测试数据
注意:测试目录及其命名没有按照标准规范定义目录,定义文件名及命名空间,只为展示php新特征而临时数据。
注意:加载类的方式有两种:⑴通过类似include等显示要加载类。⑵通过 __autoload 函数来加载所有的类文件,这里只为测试所以使用了第一种方式
以下libs目录文件中定义了类、函数、常量,均在Includes\Codee命名空间下。
libs目录
libs/mysql.php
libs/mysqli.php
libs/pdo.php
libs/file.php
libs/constants.php
libs/functions.php
index.php
<?php
namespace Includes\Code;
class Mysql
{
public function get() : string
{
return get_class();
}
}
<?php
namespace Includes\Code;
class Mysqli
{
public function get() : string
{
return get_class();
}
}
<?php
namespace Includes\Code;
class Pdo
{
public function get() : string
{
return get_class();
}
}
<?php
namespace Includes\Code;
class File
{
public function get() : string
{
return get_class();
}
}
<?php
namespace Includes\Code;
const DB_TYPE = 'mysql';
const DB_HOST = 'localhost';
const DB_NAME = 'test';
const DB_USER = 'root';
const DB_PWD = '123456';
const DB_PORT = '3306';
const DB_PREFIX = '';
<?php
namespace Includes\Code;
function getSql() : string
{
return 'Its sql';
}
function saveSql(string $sql) : string
{
return $sql.' saved!';
}
基础的写法(复杂):
<?php
include 'libs/mysql.php';
include 'libs/mysqli.php';
include 'libs/pdo.php';
include 'libs/file.php';
include 'libs/constants.php';
include 'libs/functions.php';
$mysql = new \Includes\Code\Mysql();
$mysqli = new \Includes\Code\Mysqli();
$pdo = new \Includes\Code\Pdo();
$file = new \Includes\Code\File();
echo \Includes\Code\getSql() . '<br>';
echo \Includes\Code\saveSql('select * from abc') . '<br>';
echo \Includes\Code\DB_USER . '<br>';
echo \Includes\Code\DB_PWD . '<br>';
可读性高的写法(简明许多):
注意:PHP 5.6.0发布 use关键字可导入函数与常量
<?php
include 'libs/mysql.php';
include 'libs/mysqli.php';
include 'libs/pdo.php';
include 'libs/file.php';
include 'libs/constants.php';
include 'libs/functions.php';
use Includes\Code\Mysql;
use Includes\Code\Mysqli;
use Includes\Code\Pdo;
use Includes\Code\File;
use function Includes\Code\saveSql;
use function Includes\Code\getSql;
use const Includes\Code\DB_USER;
use const Includes\Code\DB_PWD;
$mysql = new Mysql();
$mysqli = new Mysqli();
$pdo = new File();
$file = new File();
echo getSql() . '<br>';
echo saveSql('select * from abc') . '<br>';
echo DB_USER . '<br>';
echo DB_PWD . '<br>';
在这段代码中,我通过命名空间中的PHP声明来显示引入很多的类、函数、常量。这种方法依然需要很多行复杂的代码才能表明我们希望用到的类、函数、常量等,这导致在文件中需要些很多的use声明,显得繁琐。
为了解决这个问题,PHP7引入了批量的use声明,下面列举三种use声明的模式。
php7 的写法:
非混合模式的use声明
假设命名空间里多种类型的资源,例如类、函数、常量等,使用费混合模式的use声明,可以按照类型将它们归类后逐个用use声明。代码如下
这里只修改了use代码,其他的不变
use Includes\Code\{ Mysql, Mysqli, Pdo, File };
use function Includes\Code\{ getSql, saveSql };
use const Includes\Code\{ DB_USER, DB_PWD };
混合模式的use声明
在这种声明方式中,将同一个命名空间下的内容合并在一起,使用一次use关键字完成全部声明,代码如下
use Includes\Code\{
Mysql,
Mysqli,
Pdo,
File,
function getSql,
function saveSql,
const DB_USER,
const DB_PWD
};
复合模式的use声明
举例:有一个Mysql类位于Includes\Code\Cache命名空间下,有一个File类位于Includes\Code\Index命名空间下,还有两个位于Includes\Code\Data命名空间下,那么此时,若需要use声明,代码如下
use Includes\Code\{
Cache\Mysql,
Index\File,
Data\Mysqli,
Data\Pdo
};
这样的声明看上去更清晰,不必写太多的命名空间信息。