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 相关文章推荐
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php过滤XSS攻击的函数
Nov 12 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
PHP接入支付宝接口失效流程详解
Nov 10 PHP
PHP高并发和大流量解决方案整理
Mar 09 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
Javascript typeof 用法
2008/12/28 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
python实现2048小游戏
2015/03/30 Python
Python base64编码解码实例
2015/06/21 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
在校生自我鉴定
2014/01/23 职场文书
期中考试反思800字
2014/05/01 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
文案策划专业自荐信
2014/07/07 职场文书
医院见习报告范文
2014/11/03 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python