
批改狀態(tài):合格
老師批語(yǔ):
- 描述類成員重載的原理與實(shí)現(xiàn),并實(shí)例演示;
- 全局成員有哪幾種,有什么特點(diǎn),并實(shí)例演示;
- 實(shí)例演示空間的聲明與空間成員的訪問(wèn);
- 實(shí)例演示空間成員的分解與合并操作;
- 實(shí)例演示子空間,并在子空間中訪問(wèn)任何空間中的成員的方式;
class Demo
{
// 私有屬性
private $data = [];
// 公開(kāi)方法
public function data()
{
return $this->data;
}
// 設(shè)置類中不存在的屬性時(shí)調(diào)用
public function __set($name, $value)
{
$this->data[$name] = $value;
}
// 訪問(wèn)類中不存在的屬性時(shí)調(diào)用
public function __get($name)
{
if (isset($this->data[$name]))
return $this->data[$name];
return 'Property ' . $name . ' not exist.';
}
// 訪問(wèn)類中不存在的方法時(shí)調(diào)用
public function __call($name, $arguments)
{
if (method_exists($this, $name))
return call_user_func_array([$this, $name], $arguments);
return 'Method ' . $name . ' not exist.';
}
// 訪問(wèn)類中不存在的靜態(tài)方法時(shí)調(diào)用
public static function __callStatic($name, $arguments)
{
return 'Static Method: ' . $name . ', args: ' . implode(',', $arguments);
}
// 對(duì)象當(dāng)字符串使用時(shí)調(diào)用
public function __toString()
{
return 'Magic Method: ' . __FUNCTION__;
}
// 對(duì)象當(dāng)函數(shù)使用時(shí)調(diào)用
public function __invoke()
{
return 'Magic Method: ' . __FUNCTION__;
}
// 對(duì)象序列化時(shí)調(diào)用
public function __sleep()
{
return ['Magic Method', __FUNCTION__];
}
// 對(duì)象反序列化時(shí)調(diào)用
public function __wakeup()
{
echo 'Magic Method: ' . __FUNCTION__;
}
}
$obj = new Demo();
// 設(shè)置類中不存在的屬性
$obj->hello = 'hello world!';
// hello world!
echo $obj->hello, '<br>';
// 訪問(wèn)類中不存在的屬性
// Property world not exist.
echo $obj->world, '<br>';
// 訪問(wèn)類中存在的方法
// Array ( [hello] => hello world! )
echo print_r($obj->data(), true), '<br>';
// 訪問(wèn)類中不存在的方法
// Method func not exist.
echo $obj->func(), '<br>';
// 訪問(wèn)類中不存在的靜態(tài)方法
// Static Method: func, args: hello,world!
echo Demo::func('hello', 'world!'), '<br>';
// 對(duì)象當(dāng)字符串使用時(shí)
// Magic Method: __toString
echo $obj, '<br>';
// 對(duì)象當(dāng)函數(shù)使用時(shí)
// Magic Method: __invoke
echo $obj(), '<br>';
// 對(duì)象序列化時(shí)
$serObj = serialize($obj);
// O:4:"Demo":2:{s:12:"Magic Method";N;s:7:"__sleep";N;}
echo $serObj, '<br>';
// 對(duì)象反序列化時(shí)
// Magic Method: __wakeup
unserialize($serObj);
echo '<hr>';
// 類
class App
{
public $app = __CLASS__;
}
// 常量
const APP = 'Helo App';
// 函數(shù)
function app()
{
return __FUNCTION__;
}
// 類
// App
echo (new App)->app, '<br>';
// 常量
// Helo App
echo APP, '<br>';
// 函數(shù)
// app
echo app(), '<br>';
// 全局空間
namespace {
// 類
class App
{
public $app = 'App';
}
// 常量
const APP = 'Helo App';
// 函數(shù)
function app()
{
return 'app';
}
// 類
// App
echo App::class, '<br>';
// 常量
// APP
echo APP::class, '<br>';
// 函數(shù)
// app
echo app::class, '<hr>';
}
// 命名空間
namespace Ns {
// 類
class App
{
public $app = 'App';
}
// 常量
const APP = 'Helo App';
// 函數(shù)
function app()
{
return 'app';
}
// 類
// Ns\App
echo App::class, '<br>';
// 常量
// Ns\APP
echo APP::class, '<br>';
// 函數(shù)
// Ns\app
echo app::class, '<hr>';
}
將上面命名空間 Ns 分解到 0222-3.php 合并 0222-3-1.php, 0222-3-2.php, 0222-3-3.php
新建 0222-3.php
// 命名空間
namespace Ns;
require '0222-3-1.php';
require '0222-3-2.php';
require '0222-3-3.php';
// 類
// Ns\App
echo App::class, '<br>';
// 常量
// Ns\APP
echo APP::class, '<br>';
// 函數(shù)
// Ns\app
echo app::class, '<hr>';
// 命名空間
namespace Ns {
// 類
class App
{
public $app = 'App';
}
}
// 命名空間
namespace Ns {
// 常量
const APP = 'Helo App';
}
// 命名空間
namespace Ns {
// 函數(shù)
function app()
{
return 'app';
}
}
子空間訪問(wèn)其它空間使用絕對(duì)路徑
新建 0222-4.php
// 全局空間
namespace {
const HELLO = 'hello world!';
}
// 命名空間
namespace Ns {
// 類
class App
{
public $app = 'App';
}
// 全局空間
// hello world!
echo \HELLO, '<hr>';
}
// 子空間
namespace Ns\Ns1 {
// 常量
const APP = 'Helo App';
// 當(dāng)前空間 - 常量
// Ns\Ns1\APP
echo APP::class, '<br>';
// 父空間 - 類
// Ns\App
echo \Ns\App::class, '<br>';
// 全局空間
// hello world!
echo \HELLO, '<hr>';
}
// 子子空間
namespace Ns\Ns1\Ns2 {
// 函數(shù)
function app()
{
return 'app';
}
// 父空間 - 類
// Ns\App
echo \Ns\App::class, '<br>';
// 子空間 - 常量
// Ns\Ns1\APP
echo \Ns\Ns1\APP::class, '<br>';
// 當(dāng)前空間 - 函數(shù)
// Ns\Ns1\Ns2\app
echo app::class, '<br>';
// 全局空間
// hello world!
echo \HELLO, '<hr>';
}
微信掃碼
關(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)