<?php
// 1. 描述类成员重载的原理与实现,并实例演示;
class Demo1
{
//都是守保护的成员,外面不能直接拿
protected $jj = [
'name' => '小马',
'age' => 20
];
// 拿到传进来的值,找一下对应的方法
public function __get($name)
{
$a = 'get' . ucfirst($name);
if (method_exists($this, $a)) {
return $this->$a($name);
} else {
echo '抱歉,当前成员守保护';
}
}
// 动态创建属性
public function __set($name, $value)
{
echo $this->jj[$name];
$this->jj[$name] = $value;
}
//根据传进来的参数动态的调用各自的方法
public function getName($name)
{
echo '我叫' . $this->jj[$name], '<br>';
}
public function getage($name)
{
echo '我今年' . $this->jj[$name] . '岁', '<br>';
}
public function getemail($name)
{
echo '我的邮箱是:' . $this->jj[$name], '<br>';
}
}
$demo1 = new Demo1;
echo $demo1->name;
echo $demo1->age;
$demo1->email = 'admon@qq.com';
echo $demo1->email;
//直接访问受保护成员,返回受保护提示
$demo1->wages = 8999;
echo $demo1->jj['wages'];
<?php
// 2. 全局成员有哪几种,有什么特点,并实例演示;
namespace {
// 三种
// 2-1.常量,不能更改删除重写
const NAME = '小马';
// 2-2.类
class Ns1
{
}
// 2-3.函数
function ns2()
{
}
}
// 3. 实例演示空间的声明与空间成员的访问;
namespace ns1 {
class Na1
{
}
function ns2()
{
}
const NAME = '小马';
//访问当前东西在哪个命名空间中
echo Na1::class,'<br>';
echo ns2::class,'<br>';
echo NAME::class,'<br>';
}
<?php
// 4. 实例演示空间成员的分解与合并操作;
//在同一空间中不宜写过多代码,可以把同一个空间的代码分开文件写,但是空间名是相同的
//访问文件
namespace ns1 {
require '1-1.php';
echo Na1::class, '<br>';
echo ns2::class, '<br>';
echo NAME::class, '<br>';
}
//假如这是另一个文件1-1.php
namespace ns1 {
class Na1
{
}
function ns2()
{
}
const NAME = '小马';
}
<?php
// 5. 实例演示子空间,并在子空间中访问任何空间中的成员的方式;
namespace {
function a(){
echo '我是全局变量','<br>';
}
}
namespace ns1 {
function a(){
echo 1,'<br>';
}
echo a();
echo ns2\a();
echo ns2\ns3\a();
}
namespace ns1\ns2 {
function a(){
echo 2,'<br>';
}
echo \ns1\a();
echo a();
echo ns3\a();
}
namespace ns1\ns2\ns3 {
function a(){
echo 3,'<hr>';
}
echo \ns1\a();
echo \ns1\ns2\a();
echo a();
echo \a();
}