PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间


Posted in PHP onMay 06, 2016

PHP前言:

•动态地创建属性和方法

•对象的复制

•对象的比较

•加载指定的文件

•自动加载类文件

•命名空间

示例

1、类的相关知识点 3(动态地创建属性和方法)

class/class3.php

<?php
/**
* 类的相关知识点 3(动态地创建属性和方法)
*/
// 用于演示如何动态地创建属性(这就是 php 中所谓的重载)
class Class1
{
// __set 魔术方法,当设置的属性不存在或者不可访问(private)时就会调用此函数
public function __set($name, $value)
{
echo "__set \$name: {$name}, \$value: {$value}";
echo "<br />";
}
// __get 魔术方法,当获取的属性不存在或者不可访问(private)时就会调用此函数
public function __get($name)
{
echo "__get \$name: {$name}";
echo "<br />";
return 999;
}
}
$objClass1 = new Class1();
// 当你设置的属性不存在或者不可访问(private)时,就会调用对应的 __set 魔术方法
$objClass1->property1 = wanglei; // 不可访问的如 private ,或者不存在的
// 当你获取的属性不存在或者不可访问(private)时,就会调用对应的 __get 魔术方法
echo $objClass1->property2;
echo "<br />";
// 用于演示如何动态地创建方法(这就是 php 中所谓的重载)
class Class2
{
// __call 魔术方法,当调用的实例方法不存在或者不可访问(private)时就会调用此函数
public function __call($name, $arguments)
{
echo "__call \$name: {$name}, \$arguments: " . implode(', ', $arguments);
echo "<br />";
}
// __callStatic 魔术方法,当调用的类方法不存在或者不可访问(private)时就会调用此函数
public static function __callStatic($name, $arguments)
{
echo "__callStatic \$name: {$name}, \$arguments: " . implode(', ', $arguments);
echo "<br />";
}
}
$objClass2 = new Class2();
// 当你调用的实例方法不存在或者不可访问(private)时,就会调用对应的 __call 魔术方法
echo $objClass2->method1("aaa", "bbb");
// 当你调用的类方法不存在或者不可访问(private)时,就会调用对应的 __callStatic 魔术方法
echo Class2::method2("aaa", "bbb");

2、类的相关知识点 4(对象的复制,对象的比较)

class/class4.php

<?php
/**
* 类的相关知识点 4(对象的复制,对象的比较)
*/
// 用于演示如何复制对象
class Class1
{
public $field1 = "field1";
public $field2 = "field2";
// 通过 clone 复制对象时,会调用此魔术方法
function __clone()
{
echo "__clone";
echo "<br />";
}
}
$objClass1 = new Class1();
// 通过 clone 复制对象,会调用 __clone 魔术方法
$objClass2 = clone $objClass1;
// 通过 clone 复制的对象为浅拷贝(shallow copy),即成员数据之间的一一赋值, 而所有的引用属性仍然会是一个指向原来的变量的引用(如果要做 deep copy 则需要自己写)
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 = new MyClass();
echo $obj->name;
echo "<br />"; 
class/MyClass.class.php
<?php
class MyClass
{
public $name = "webabcd";
}

4、类的相关知识点 6(命名空间)

class/class6.php

<?php
/**
* 类的相关知识点 6(命名空间)
*/
// 以下代码仅用于演示,实际项目中不建议在一个文件中定义多个 namespace
// 如果当前文件中只有一个命名空间,那么下面的这段可以省略掉命名空间的大括号,直接 namespace MyNamespace1; 即可
namespace MyNamespace1
{
const MyConst = "MyNamespace1 MyConst";
function myFunction()
{
echo "MyNamespace1 myFunction";
echo "<br />";
}
class MyClass
{
public function myMethod()
{
echo "MyNamespace1 MyClass myMethod";
echo "<br />";
}
}
}
// 定义命名空间时,可以指定路径
namespace Sub1\Sub2\MyNamespace2
{
const MyConst = "MyNamespace2 MyConst";
function myFunction()
{
echo "MyNamespace2 myFunction";
echo "<br />";
}
class MyClass
{
public function myMethod()
{
echo "MyNamespace2 MyClass myMethod";
echo "<br />";
}
}
}
namespace MyNamespace3
{
// 调用指定命名空间中的指定常量
echo \MyNamespace1\MyConst;
echo "<br />";
// 调用指定命名空间中的指定函数
\MyNamespace1\myFunction();
// 实例化指定命名空间中的类
$obj1 = new \MyNamespace1\MyClass();
$obj1->myMethod();
}
namespace MyNamespace4
{
// use 指定的命名空间
use \Sub1\Sub2\MyNamespace2;
// 之后不用再写全命名空间的路径了,因为之前 use 过了
echo MyNamespace2\MyConst;
echo "<br />";
MyNamespace2\myFunction();
$obj1 = new MyNamespace2\MyClass();
$obj1->myMethod();
}
namespace MyNamespace5
{
// use 指定的命名空间,并为其设置别名
use \Sub1\Sub2\MyNamespace2 as xxx;
// 之后再调用命名空间时,可以使用其别名
echo xxx\MyConst;
echo "<br />";
xxx\myFunction();
$obj1 = new xxx\MyClass();
$obj1->myMethod();
}

以上所述是小编给大家介绍的PHP动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 的相关介绍,希望对大家有所帮助!

PHP 相关文章推荐
生成卡号php代码
Apr 09 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
php常用数学函数汇总
Nov 21 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 #PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 #PHP
PHP图片加水印实现方法
May 06 #PHP
php数组冒泡排序算法实例
May 06 #PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 #PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 #PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 #PHP
You might like
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
php中session使用示例
2014/03/29 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
jquery对表单操作2
2011/04/06 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Python函数参数类型*、**的区别
2015/04/11 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python实时监控logstash日志代码
2020/04/27 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
父亲追悼会答谢词
2014/01/17 职场文书
婚礼答谢礼品
2015/01/20 职场文书