实例化php类时传参的方法分析


Posted in PHP onJune 05, 2020

本文实例讲述了实例化php类时传参的方法。分享给大家供大家参考,具体如下:

当我们实例化一个php类的时候,要怎么传递参数呢?这取决于该类的构造方法。

例:

person.class.php

<?php
    class person{
        var $name;
        var $color;
        var $sex;
        var $age;
        function __construct($name,$age='',$sex='boy'){
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
            $this->color = 'yello';
        }
        function eat(){
            echo $this->name.'要吃饭';
        }
        function xinxi(){
            echo $this->name.' is '.$this->sex.' and age is '.$this->age.' fuse is '.$this->color;
        }
        function zuoyong(){
          //类似于这样的内部调用,相当于把eat()的代码引入到zuoyong()里面,而不是跳转到eat()里面继续执行
            //如果是http://localhost/zuoyong?food=xigua这样的url来调用zuoyong()
            //那么eat()中可直接通过$_GET['food']获取url参数,因为全局变量可在函数内部使用
            $this->eat();
        }
    }
?>

son.php

<?php
    include('person.class.php');
    $son = new person('cuihua',25,'girl');//此处的参数传递要和类的构造方法里面的参数顺序对应
    //$son->xinxi();//cuihua is girl and age is 25 fuse is yello
    $son->name = '田妞';
    $son->eat();//田妞要吃饭
?>

注:php类的属性($name、$age等)可以在该类的全局范围内使用,可以把类的属性视为“该类的”全局变量。但是当外部程序重新调用这个类中的方法时,该类会重新被实例化,也就是说要再次执行构造方法,那么上一次给$name等属性赋的值就会被清空,所以$name等属性的值不会像常量或是session中的值那样一直保持下去。

son2.php

<?php
    include('person.class.php');
    $son = new person('cuihua',25,'girl');
    $son2 = $son;
    $son2->name = '田妞';
    $son->eat();//田妞要吃饭
?>

当我把$son对象赋予$sin2之后,改变了$son2的name参数,此时发现$son的name参数也响应的跟着改变,由此可见:在php5中,把对象赋值给变量,是按引用传递对象,而不是进行值传递,此时并不会创建$son的副本。传递对象到函数,或从方法返回对象,是引用传递还是值传递,待验证。

可以通过var_dump()打印对象,不过只能打印对象的属性,它的方法不能打印出来,要想获取对象的方法列表,可以用get_class_methods函数。

<?php
$son = new person('cuihua',25,'girl');
var_dump($son);
/*
object(person)[1]
 public 'name' => string 'cuihua' (length=6)
 public 'color' => string 'yello' (length=5)
 public 'sex' => string 'girl' (length=4)
 public 'age' => int 25
*/
 
$mon = get_class_methods($son);
var_dump($mon);
/*
array (size=4)
 0 => string '__construct' (length=11)
 1 => string 'eat' (length=3)
 2 => string 'xinxi' (length=5)
 3 => string 'zuoyong' (length=7)
*/
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在PHP中使用与Perl兼容的正则表达式
Nov 26 PHP
php循环输出数据库内容的代码
May 24 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
PHP浮点数精度问题汇总
May 13 PHP
php生成二维码
Aug 10 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
laravel学习教程之存取器
Jul 30 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 #PHP
PHP预定义接口――Iterator用法示例
Jun 05 #PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 #PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 #PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 #PHP
如何在PHP中生成随机数
Jun 04 #PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 #PHP
You might like
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
JS实现页面打印功能
2017/03/16 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Python extract及contains方法代码实例
2020/09/11 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
副总经理工作职责
2013/11/28 职场文书
英文简历中的自我评价用语
2013/12/09 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
试用期辞职信范文
2015/03/02 职场文书
优秀团员自我评价
2015/03/10 职场文书
毕业实习证明范本
2015/06/16 职场文书
小学入学感言
2015/08/01 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis