
批改狀態(tài):合格
老師批語:先用起來, 一時難以理解 , 就先用, 用著用著就明白了
<?php
//命名空間
// 全局成員四大家族: 類, 接口, 函數(shù), 常量
namespace H5\C3
{
echo __NAMESPACE__,'<BR>';
class Demo
{
const PRO_LANG = '當前語言是html+css3+js(PHP)';
}
}
// echo Demo::PRO_LANG;
namespace JS\CSS
{
class Demo
{
const PRO_LANG = '當前語言是html+css3+js(c++)';
}
class T1
{
const PRO_LANG = '我是T1';
}
class T2
{
const PRO_LANG = '我是T2';
}
}
// namespace H5\JS;
namespace H5\JS
{
class Demo
{
const PRO_LANG = '當前語言是html+css3+js(java)';
}
//當:在本命名空間里訪問了沒有的函數(shù),類等的時候,會自動去全局空間找
echo \Test::A(),'<br>';
echo \Test::AA;
echo '<br>';
echo (new \Test1)->B();
echo '<br>';
}
//創(chuàng)建匿名空間的話。上面所有命名空間應該改為使用{}
namespace
{
//給空間取別名:(當引入的同一個空間比較多時,就可以使用命名空間)
use JS\CSS as t;
echo t\T1::PRO_LANG;
echo '<br>';
//或
use JS\CSS\T2;
echo T2::PRO_LANG;
echo '<br>';
echo \H5\C3\Demo::PRO_LANG;
echo '<br>';
echo \JS\CSS\Demo::PRO_LANG;
echo '<br>';
echo H5\JS\Demo::PRO_LANG;
class Test
{
const AA ='試一試';
public static function A()
{
return '我在這里會被調用';
}
}
class Test1
{
public function B()
{
return '實例化看下';
}
}
// echo (new Test1)->B();
}
<?php
// 如果想實現(xiàn)自動加載,需要滿足二個條件
// 1. 命名空間必須和類文件所在的絕對路徑一一對應
// 2. 當前類名稱與當前的類文件的名稱完全一致
namespace inc\lib;//條件1;
class Demo1//條件2
{
public function Test()
{
return '當前文件是Demo1.php 。當前文件的類名稱是Demo1';
}
}
<?php
class Demo2
{
public function Test()
{
return '當前文件是Demo2.php 。當前文件的類名稱是Demo2';
}
}
<?php
class Demo3
{
public function Test()
{
return '當前文件是Demo3.php 。當前文件的類名稱是Demo3';
}
}
<?php
//封裝自動加載
//spl_autoload_register — 注冊給定的函數(shù)作為 __autoload 的實現(xiàn)
try{
spl_autoload_register(function($className){
//1,先將類名空間的分隔符轉為目錄分隔符
$path = str_replace('\\',DIRECTORY_SEPARATOR , $className);
// 測試
// echo $path;
//生成加載類文件名稱
$file =__DIR__.DIRECTORY_SEPARATOR.$path.'.php';
// 測試
// echo $file;
//3,加載這個文件
require $file;
});
}catch(Exception $e){
die($e->getMessage());
}
<?php
require 'autoload.php';
use inc\lib\Demo1;
$demo1=new demo1;
echo $demo1->Test();
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號