作业
1.知识点:
(1)关键字:
-namespace:命名空间(必须写在脚本的第一行)
-__NAMESPACE__
:魔术常量,返回当前空间名称
-__CLASS__
:返回一个“完全限定名称”的类名称
-__FUNCTION__
:返回一个“完全限定名称”的函数名
-__METHOD__
:返回一个“完全限定名称”的类中方法名
-::CLASS
:返回具有完全限定的类名
(2)导入和别名:
a、导入关键字:use \完全限定名称的全局成员(默认从全局开始,可以省略\)
b、常见的加载函数:include|require 导入不同于加载
c、别名:use \demo as de;(如果导入的成员名字和别名名字一直,可以省略as,直接使用),别名用具解决导入后的命名冲突。
作业一:问答题
一、
1.完全限定名称:从全局空间开始查找、类似绝对路径 例如:use \part1\Demo\function
2.限定名称:从当前空间开始查找,类似相对路径 例如:use namespace\Demo\function
3.非限定名称:仅在当前空间进行查找,类似当前路径 例如: use Demo\Class
二、
1、非限定名称和限定名称可以直接转化成完全限定名称,
2、非限定名称主要使用在同命名空间下,不同脚本之间成员访问。
3、限定名称主要使用在,在同命名空间下,不同子命名空间中成元的访问,(至少有一个‘\’,不能在开头)
4、完全限定名称,主要使用在不同命名空间之间称员的访问,从根空间开始查找必须有‘\’开头
三、
1、导入关键字:use (加载:include|require)
在脚本中加载外部脚本后,为了简化成员的调用和使用,可以用use关键字直接导入成员,然后就可以直接使用(不需要在写冗长的完全限制名称了.
别名关键字:as 解决导入简化完全限定名称造成命名冲突 例如:use \part1\Demo as Demo;
四、
1、::class
:直接返回的完全限定的类名,而__NAMESPACE__
:直接返回的当前空间名称
2、在php代码中,一般都是直接调用的类,很少单独调用空间的,所以一般都时直接使用::class
,但有些时候考虑到命名空间名称修改,可以使用:__NAMESPACE__.\Demo\function;
作业二:编程题
代码:
php文件1:demo0.php
<?php
namespace part1\con;
//常量
const SITE='中文网';
//在php7+允许define创建数组常量,但不支持命名空间
define('CITY',['name'=>'中国','time'=>'2020']);
namespace part1\func;
//函数
function sum(int $a,int $b):string {
return '$a*$b='.($a*$b);
}
namespace part1\cla;
// 类
class Demo {
public $city='郑州';
public $age;
public function __construct($age){
$this->age=$age;
}
public function get_info(){
return '我在'.$this->city.$this->age.'年';
}
}
// $a=new Demo(5);
// $c=$a->get_info();
// echo $c;
//接口
namespace part1\api;
interface Itest {
public static function hello();
}
代码
<?php
// 匿名类:只是用一次
namespace part1;
echo (new class ('李老师'){
public $name;
// 构造方法
public function __construct($name)
{
$this->name = $name;
}
})->name;
echo '<br>';
// 类型约束:函数和方法参数和返回值
function sum(int $a,int $b):string {
return '$a+$b='.($a+$b);
}
$c= sum(5,10);
echo $c.'<br>';
echo __NAMESPACE__;
echo '<hr>';
// 四类全局称员的访问方式
echo "<h1>四类全局称员的访问方式</h1>";
require 'demo0.php';
$s= \part1\con\SITE;
$s1= CITY['time'];
$f= \part1\func\sum(3,5);
echo $s,$s1;
echo $f.'<br>';
use \part1\cla\Demo;
$C=new Demo(5);
echo $C->get_info();
echo '<br>';
class Test implements \part1\api\Itest
{
public static function hello(){
return __FUNCTION__;
}
}
$a=Test::hello();
echo $a;
// 导入四类全局成员及别名的使用
echo "<h2>导入四类全局成员及别名的使用</h2>";
//别名和导入成员名字一样,可以省略;
use const \part1\con\SITE;
echo SITE;
use function \part1\func\sum as ride;
echo ride(3,5);
echo $s,$s1;
echo $f.'<br>';
use \part1\cla\Demo as D;
$C=new D(5);
echo $C->get_info();
echo '<br>';
use \part1\api\Itest as I;
class Test1 implements I
{
public static function hello(){
return __FUNCTION__;
}
}
$a=Test1::hello();
echo $a;
结果图:
总结:
1、导入常量和函数时:use 要跟const和function,然后在跟完全限制名称
2、导入的成员的别名和成员名一样时,可以省略as别名,直接使用;
3、全局成员有:类、接口、函数、常量
4、class_implements();
:查询接口
6、self::class
:返回当前类的完全限定名称;
7、define()可以设置数组常量,默认在全局空间(php7+);