PHP面向对象6之工具-魔术方法
PHP包含类文件:
1 <?php 2 /** 3 * PHP面向对象工具 --包含类文件 4 */ 5 //如果把Computer类放在一个单独的文件,名为:computer.class.php 6 /* 7 class Computer{ 8 public $_name ='dell'; 9 public function _run(){ 10 echo '运行'; 11 } 12 } 13 */ 14 //引用类文件 15 require 'computer.class.php'; 16 /* 17 * 缺点: 18 * 如果有多个类,需要引用很多 19 * 如果有用不到的,会产生浪费 20 * 如果遗漏了,会造成错误 21 */ 22 $com = new Computer(); 23 echo $com->_name; 24 $com->_run(); 25 ?>
需要的 computer.class.php:
1 <?php 2 //用到的类文件 3 class Computer{ 4 public $_name ='dell'; 5 public function _run(){ 6 echo '运行'; 7 } 8 } 9 ?>
需要的 person.class.php:
1 <?php 2 //用到的类文件 3 class Person{ 4 public function _run(){ 5 echo '联想'; 6 } 7 } 8 ?>
PHP魔术方法之__autoload()方法:
1 <?php 2 /** 3 * PHP面向对象工具--PHP魔术方法 4 * php引入了__autoload()内置方法来自动包含文件,__autoload()应该被写成单个参数的方法, 5 * 当php引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类名当作字符串参数传递给它。 6 */ 7 //$_className =类名 8 function __autoload($_className){ 9 require strtolower($_className.'.class.php'); 10 } 11 //自动引用computer类 12 $com = new Computer(); 13 echo $com->_name; 14 $com->_run(); 15 //自动引用person类 16 $per = new Person(); 17 $per->_run(); 18 19 ?>
PHP魔术方法之__call()方法:
1 <?php 2 /** 3 * PHP面向对象工具--PHP魔术方法 4 * php采用了__call()内置方法来屏蔽对象调用方法时产生的错误,当对象调用一个不存在的方法时, 5 * 会自动调用__call()方法。 6 */ 7 8 class Computer{ 9 public function _run(){ 10 echo '运行'; 11 } 12 public function __call($_methodName,$_argList){ 13 echo $_methodName.'方法不存在!'; 14 print_r($_argList); 15 } 16 } 17 //使用__call()方法来屏蔽调用错误 18 19 $com = new Computer(); 20 $com->_go('lee',123);//调用一个不存在的方法 21 ?>
PHP魔术方法之__tostring()方法:
<?php /*** PHP面向对象工具--PHP魔术方法* php使用__tostring()内置方法来打印对象的引用,没有使用__tostring()的对象产生* 一个错误,当打印对象的时候会自动调用__tostring()方法。*/ class Computer{public function _run(){echo '运行';}private function __toString(){return '我是对象字符串';} } $com = new Computer(); echo $com; ?>
PHP魔术方法之__clone()方法:
1 <?php 2 /** 3 * PHP面向对象工具--PHP魔术方法 4 * php可以在类中定义一个__clone()内置方法来调整对象的克隆行为,当一个对象被克隆 5 * 的时候自动执行__clone()方法,而复制的对象可以在其方法体内进行调整。 6 */ 7 class Computer{ 8 public $_name = 'dell'; 9 public function _run(){ 10 echo '运行'; 11 } 12 //只有有克隆操作的时候,才会执行 13 public function __clone(){ 14 echo '克隆成功!'; 15 $this->_name='thinkpad'; 16 } 17 } 18 19 //引用传递 20 $com1= new Computer(); 21 $com2 = $com1; 22 $com2->_name='ibm'; 23 echo $com1->_name; 24 echo $com2->_name; 25 26 echo '<br />'; 27 28 //独立实例化 29 $com3 = new Computer(); 30 $com4 = new Computer(); 31 $com3->_name='联想'; 32 echo $com3->_name; 33 echo $com4->_name; 34 35 echo '<br />'; 36 37 //对象克隆 38 $com5 = new Computer(); 39 $com5->_name='acer'; 40 $com6 = clone $com5;//克隆之后,就相当于把被克隆对象又new了一个实例 41 echo $com5->_name; 42 echo $com6->_name; 43 ?>
PHP类函数和对象函数:
1 <?php 2 /** 3 * PHP面向对象工具--类函数和对象函数 4 * php提供了一系列强大的函数来检测类和对象,以便在第三方系统运行时知道正在使用的是哪个。 5 */ 6 class Computer{ 7 public function _run1(){ } 8 private function _run2(){} 9 public $_name1='小王'; 10 private $_name2='小李'; 11 } 12 class NoteComputer extends Computer{ 13 14 } 15 interface Person{ 16 17 } 18 19 $com = new Computer(); 20 $noteCom = new NoteComputer(); 21 //1、class_exists()函数表示类是否存在,如果类存在返回true,反之返回false 22 echo class_exists('Computer'); 23 echo '<br />'; 24 //2、get_class()函数获取对象的类名,如果不是对象,则返回false 25 echo get_class($com); 26 echo '<br />'; 27 //3、get_class_methods()函数获取类中的方法(公共的),以数组形式返回。 28 print_r(get_class_methods($com)); 29 echo '<br />'; 30 //4、get_class_vars()函数获取类中的字段(公共的),以数组形式返回。 31 print_r(get_class_vars('Computer')); 32 echo '<br />'; 33 //5、get_parent_class()函数获取子类的父类,如果没有则返回false 34 echo get_parent_class('NoteComputer'); 35 echo '<br />'; 36 //6、interface_exists()函数确定接口是否存在,如果存在返回true,反之返回false 37 echo interface_exists('Person'); 38 echo '<br />'; 39 //7、is_a()函数确定对象是否是类或者是否是这个类的父类时,如果是返回true,反之返回false 40 echo is_a($noteCom,'Computer'); 41 echo '<br />'; 42 //8、is_subclass_of()确定对象是否是类的子类,如果是返回true,反之返回false 43 echo is_subclass_of($noteCom, 'Computer'); 44 echo '<br />'; 45 //9、method_exists()函数确定对象的方法是否存在,如果是返回true,反之返回false 46 echo method_exists($com, '_run1'); 47 48 ?>
PHP反射机制:
1 <?php 2 /** 3 * PHP面向对象工具--反射API 4 * php5的类和对象函数并没有告诉我们类内部的一切,而只是报告了它们的公共成员,要充分了解一个类, 5 * 需要知道其私有成员和保护成员,还要知道其方法所期望的参数,对此,使用反射API。 6 */ 7 8 //查看自定义类 9 class Computer{ 10 public function _run1(){ } 11 private function _run2(){} 12 private static function _run3(){} 13 public $_name1='小王'; 14 private $_name2='小李'; 15 public static $_name3; 16 } 17 //使用反射API列出类的信息 18 echo '<pre>'; 19 echo 'Computer类信息:<br />'; 20 Reflection::export(new ReflectionClass('Computer')); 21 22 //列出内置的类信息 23 echo '内置类信息:<br />'; 24 Reflection::export(new ReflectionClass('Reflection')); 25 26 //获取类里的某个元素 27 $rc = new ReflectionClass('DateTime'); 28 $rb = new ReflectionClass('Computer'); 29 echo $rc->getName();//获取类名 30 echo '<br />'; 31 echo $rb->getFileName();//获取文件名 32 echo '<br />'; 33 print_r($rc->getConstants()); 34 35 ?>
转载于:https://www.cnblogs.com/im404/articles/PHP_OOP6.html
PHP面向对象6之工具-魔术方法相关推荐
- Python入门基础(6)--面向对象/类和对象/魔术方法
面向对象基本概述 面向对象(Object Oriented Programming,OOP)编程:扩展性更强.可读性更好.面向对象的编程将数据和操作数据封装到对象中,组织代码和数据的方式更接近人的思维 ...
- python魔术方法abstract_python学习之面向对象高级特性和魔术方法
01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一. 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数 ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...
- 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)
目录 一.定义类和对象 1.定义类 2.创建一个对象 2.1 创建一个实例对象并调用实例方法 2.2 创建另一个实例对象: 2.3 添加实例属性 二.__init__(self) 1. __init_ ...
- python 运算符重载_零基础小白Python入门必看:面向对象之典型魔术方法
魔术方法 查看类的魔术方法 class A: passdir(A) # 可以得到类所有公有成员复制代码 输出结果如下 ['__class__', '__delattr__', '__dict__', ...
- php面向对象魔术方法,PHP面向对象中的魔术方法
魔术方法:某种场景下,能够自动调用的方法 如: __construct. __destruct.__set. __get. __isset.__unset.__call __construct(): ...
- PHP面向对象的魔术方法
<?php /** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */ class Person{ prote ...
- 面向对象(继承,多态,单态,魔术方法)
# ### 继承 """ 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 是一种继承关系 被继承的类叫做父类(基类,超类),继承的类叫做子类(衍生 ...
- 面向对象两个简单的魔术方法
//今天的学习是魔术方法,学习了两个: 1,构造方法 __construct //构造函数当类实例化之前调用括号内可以有参数 内部给参数赋值 class Person{ var $name; ...
最新文章
- win32 打印机api
- mass Framework在后端的核心模块
- 大脑对陌生音乐的反应要比对熟悉音乐的反应强度
- 题目1172:哈夫曼树
- 中小企业如何规避因员工跳槽而产生的风险?
- Activiti部署报错
- 百度统计 java 实现思路_2019社招阿里、腾讯、蚂蚁金服「四面」Java面试真题分享...
- 网站用户访问速度监测分析项目
- 【Dynamics AX 6】axmodel新特性
- 关于在hue当中执行定时任务,时间的设置。
- 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
- (转)证券投资及财富管理市场创新趋势
- python做出代码结构图_数据结构之图的代码实现(使用Python实现)
- 交换机组网最常见的8大故障以及如何解决
- c语言程序设计高校饭卡系统,C语言课程设计-学生饭卡管理系统(45页)-原创力文档...
- JRtplib开发笔记(一):JRtplib简介、JThread库编译
- python爬虫付费内容_Python爬虫:十大付费代理详细对比
- graphpad7.04多组比较p值_手把手教你用Graphpad做单因素方差分析
- 普通话测试软件字体怎么调整,普通话考试常见问题解答
- 计算机信息系统审计简报,审计简报范文审计报告写.doc
热门文章
- 【Cocoa(mac) Application 开发系列之二】总结一些常用控件及自定义View
- 鸿蒙来了!能否与安卓、iOS三足鼎立?
- 我脸都问绿了!二面竟然被问到MySQL时间类型datetime、bigint及timestamp的查询效率......
- 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
- 这个教人写出烂代码的项目在 GitHub 上火了...
- “12306”是如何支撑百万QPS的?
- 华为某员工哀叹:过年回来后心态已崩,自己是亲戚中混的最差的
- 给职场人士的四点良心建议
- __str__和__repr__
- layey图片内容不居中