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 相关文章推荐
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
PHP函数积累总结
2019/03/19 PHP
原生js写的放大镜效果
2012/08/22 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
Python实现简单过滤文本段的方法
2017/05/24 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python3分析处理声音数据的例子
2019/08/27 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
社区清明节活动总结
2014/07/04 职场文书
初中家长评语大全
2014/12/26 职场文书
关于感谢信的范文
2015/01/23 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
js不常见操作运算符总结
2021/11/20 Javascript