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之工具-魔术方法相关推荐

  1. Python入门基础(6)--面向对象/类和对象/魔术方法

    面向对象基本概述 面向对象(Object Oriented Programming,OOP)编程:扩展性更强.可读性更好.面向对象的编程将数据和操作数据封装到对象中,组织代码和数据的方式更接近人的思维 ...

  2. python魔术方法abstract_python学习之面向对象高级特性和魔术方法

    01_property商品应用.py 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一. 类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数 ...

  3. PHP面向对象常见的关键字和魔术方法

    在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...

  4. Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类

    目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...

  5. 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)

    目录 一.定义类和对象 1.定义类 2.创建一个对象 2.1 创建一个实例对象并调用实例方法 2.2 创建另一个实例对象: 2.3 添加实例属性 二.__init__(self) 1. __init_ ...

  6. python 运算符重载_零基础小白Python入门必看:面向对象之典型魔术方法

    魔术方法 查看类的魔术方法 class A: passdir(A) # 可以得到类所有公有成员复制代码 输出结果如下 ['__class__', '__delattr__', '__dict__', ...

  7. php面向对象魔术方法,PHP面向对象中的魔术方法

    魔术方法:某种场景下,能够自动调用的方法 如: __construct. __destruct.__set. __get. __isset.__unset.__call __construct(): ...

  8. PHP面向对象的魔术方法

    <?php /** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */ class Person{ prote ...

  9. 面向对象(继承,多态,单态,魔术方法)

    # ### 继承 """ 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 是一种继承关系 被继承的类叫做父类(基类,超类),继承的类叫做子类(衍生 ...

  10. 面向对象两个简单的魔术方法

    //今天的学习是魔术方法,学习了两个: 1,构造方法 __construct    //构造函数当类实例化之前调用括号内可以有参数  内部给参数赋值 class Person{ var $name; ...

最新文章

  1. win32 打印机api
  2. mass Framework在后端的核心模块
  3. 大脑对陌生音乐的反应要比对熟悉音乐的反应强度
  4. 题目1172:哈夫曼树
  5. 中小企业如何规避因员工跳槽而产生的风险?
  6. Activiti部署报错
  7. 百度统计 java 实现思路_2019社招阿里、腾讯、蚂蚁金服「四面」Java面试真题分享...
  8. 网站用户访问速度监测分析项目
  9. 【Dynamics AX 6】axmodel新特性
  10. 关于在hue当中执行定时任务,时间的设置。
  11. 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
  12. (转)证券投资及财富管理市场创新趋势
  13. python做出代码结构图_数据结构之图的代码实现(使用Python实现)
  14. 交换机组网最常见的8大故障以及如何解决
  15. c语言程序设计高校饭卡系统,C语言课程设计-学生饭卡管理系统(45页)-原创力文档...
  16. JRtplib开发笔记(一):JRtplib简介、JThread库编译
  17. python爬虫付费内容_Python爬虫:十大付费代理详细对比
  18. graphpad7.04多组比较p值_手把手教你用Graphpad做单因素方差分析
  19. 普通话测试软件字体怎么调整,普通话考试常见问题解答
  20. 计算机信息系统审计简报,审计简报范文审计报告写.doc

热门文章

  1. 【Cocoa(mac) Application 开发系列之二】总结一些常用控件及自定义View
  2. 鸿蒙来了!能否与安卓、iOS三足鼎立?
  3. 我脸都问绿了!二面竟然被问到MySQL时间类型datetime、bigint及timestamp的查询效率......
  4. 已经被说“烂”的微服务,到底是个什么鬼?通过拆分实战案例来带你入门。...
  5. 这个教人写出烂代码的项目在 GitHub 上火了...
  6. “12306”是如何支撑百万QPS的?
  7. 华为某员工哀叹:过年回来后心态已崩,自己是亲戚中混的最差的
  8. 给职场人士的四点良心建议
  9. __str__和__repr__
  10. layey图片内容不居中