PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
PHP前言:
•动态地创建属性和方法
•对象的复制
•对象的比较
•加载指定的文件
•自动加载类文件
•命名空间
示例
1、类的相关知识点3(动态地创建属性和方法)
class/class3.php
<?php
/**
*类的相关知识点3(动态地创建属性和方法)
*/
//用于演示如何动态地创建属性(这就是php中所谓的重载)
classClass1
{
//__set魔术方法,当设置的属性不存在或者不可访问(private)时就会调用此函数
publicfunction__set($name,$value)
{
echo"__set\$name:{$name},\$value:{$value}";
echo"<br/>";
}
//__get魔术方法,当获取的属性不存在或者不可访问(private)时就会调用此函数
publicfunction__get($name)
{
echo"__get\$name:{$name}";
echo"<br/>";
return999;
}
}
$objClass1=newClass1();
//当你设置的属性不存在或者不可访问(private)时,就会调用对应的__set魔术方法
$objClass1->property1=wanglei;//不可访问的如private,或者不存在的
//当你获取的属性不存在或者不可访问(private)时,就会调用对应的__get魔术方法
echo$objClass1->property2;
echo"<br/>";
//用于演示如何动态地创建方法(这就是php中所谓的重载)
classClass2
{
//__call魔术方法,当调用的实例方法不存在或者不可访问(private)时就会调用此函数
publicfunction__call($name,$arguments)
{
echo"__call\$name:{$name},\$arguments:".implode(',',$arguments);
echo"<br/>";
}
//__callStatic魔术方法,当调用的类方法不存在或者不可访问(private)时就会调用此函数
publicstaticfunction__callStatic($name,$arguments)
{
echo"__callStatic\$name:{$name},\$arguments:".implode(',',$arguments);
echo"<br/>";
}
}
$objClass2=newClass2();
//当你调用的实例方法不存在或者不可访问(private)时,就会调用对应的__call魔术方法
echo$objClass2->method1("aaa","bbb");
//当你调用的类方法不存在或者不可访问(private)时,就会调用对应的__callStatic魔术方法
echoClass2::method2("aaa","bbb");
2、类的相关知识点4(对象的复制,对象的比较)
class/class4.php
<?php
/**
*类的相关知识点4(对象的复制,对象的比较)
*/
//用于演示如何复制对象
classClass1
{
public$field1="field1";
public$field2="field2";
//通过clone复制对象时,会调用此魔术方法
function__clone()
{
echo"__clone";
echo"<br/>";
}
}
$objClass1=newClass1();
//通过clone复制对象,会调用__clone魔术方法
$objClass2=clone$objClass1;
//通过clone复制的对象为浅拷贝(shallowcopy),即成员数据之间的一一赋值,而所有的引用属性仍然会是一个指向原来的变量的引用(如果要做deepcopy则需要自己写)
echo$objClass2->field1;//output:field1
echo"<br/>";
echo$objClass2->field2;//output:field2
echo"<br/>";
//如果两个对象的属性和属性值都相等,则他们“==”相等,
if($objClass1==$objClass2)
{
echo'$objClass1==$objClass2';
echo"<br/>";
}
//如果两个对象的属性和属性值都相等,但不是同一个类的实例,则他们“===”不相等
if($objClass1!==$objClass2)
{
echo'$objClass1!==$objClass2';
echo"<br/>";
}
//如果两个对象是同一个类的实例,则他们“===”相等
if($objClass1===$objClass1)
{
echo'$objClass1===$objClass1';
echo"<br/>";
}
//如果两个对象是同一个类的实例,则他们“===”相等
$objClass3=&$objClass1;
if($objClass1===$objClass3)
{
echo'$objClass1===$objClass3';
echo"<br/>";
}
3、类的相关知识点5(加载指定的文件,自动加载类文件)
class/class5.php
<?php
/**
*类的相关知识点5(加载指定的文件,自动加载类文件)
*/
/*
*包含并运行指定文件,可以是绝对路径也可以是相对路径
*include找不到的话则警告,然后继续运行(include_once:在当前文件中只include指定文件一次)
*require找不到的话则错误,然后终止运行(require_once:在当前文件中只require指定文件一次)
*include'';
*require'';
*include_once'';
*require_once'';
*/
//演示如何通过__autoload魔术方法,来实现类的自动加载
function__autoload($class_name)
{
//加载指定的文件
require_once$class_name.'.class.php';
}
//如果在当前文件中找不到MyClass类,那么就会去调用__autoload魔术方法
$obj=newMyClass();
echo$obj->name;
echo"<br/>";
class/MyClass.class.php
<?php
classMyClass
{
public$name="webabcd";
}
4、类的相关知识点6(命名空间)
class/class6.php
<?php
/**
*类的相关知识点6(命名空间)
*/
//以下代码仅用于演示,实际项目中不建议在一个文件中定义多个namespace
//如果当前文件中只有一个命名空间,那么下面的这段可以省略掉命名空间的大括号,直接namespaceMyNamespace1;即可
namespaceMyNamespace1
{
constMyConst="MyNamespace1MyConst";
functionmyFunction()
{
echo"MyNamespace1myFunction";
echo"<br/>";
}
classMyClass
{
publicfunctionmyMethod()
{
echo"MyNamespace1MyClassmyMethod";
echo"<br/>";
}
}
}
//定义命名空间时,可以指定路径
namespaceSub1\Sub2\MyNamespace2
{
constMyConst="MyNamespace2MyConst";
functionmyFunction()
{
echo"MyNamespace2myFunction";
echo"<br/>";
}
classMyClass
{
publicfunctionmyMethod()
{
echo"MyNamespace2MyClassmyMethod";
echo"<br/>";
}
}
}
namespaceMyNamespace3
{
//调用指定命名空间中的指定常量
echo\MyNamespace1\MyConst;
echo"<br/>";
//调用指定命名空间中的指定函数
\MyNamespace1\myFunction();
//实例化指定命名空间中的类
$obj1=new\MyNamespace1\MyClass();
$obj1->myMethod();
}
namespaceMyNamespace4
{
//use指定的命名空间
use\Sub1\Sub2\MyNamespace2;
//之后不用再写全命名空间的路径了,因为之前use过了
echoMyNamespace2\MyConst;
echo"<br/>";
MyNamespace2\myFunction();
$obj1=newMyNamespace2\MyClass();
$obj1->myMethod();
}
namespaceMyNamespace5
{
//use指定的命名空间,并为其设置别名
use\Sub1\Sub2\MyNamespace2asxxx;
//之后再调用命名空间时,可以使用其别名
echoxxx\MyConst;
echo"<br/>";
xxx\myFunction();
$obj1=newxxx\MyClass();
$obj1->myMethod();
}
以上所述是小编给大家介绍的PHP动态地创建属性和方法,对象的复制,对象的比较,加载指定的文件,自动加载类文件,命名空间的相关介绍,希望对大家有所帮助!