实例化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 SQL防注入代码集合
Apr 25 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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
php xml实例 留言本
2009/03/20 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
angularJS提交表单(form)
2015/02/09 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue源码中的检测方法的实现
2019/09/26 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
python如何定义带参数的装饰器
2018/03/20 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
Python PO设计模式的具体使用
2019/08/16 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python自动发微信监控报警
2019/09/06 Python
使用Python的turtle模块画国旗
2019/09/24 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
什么造成了Java里面的异常
2016/04/24 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
校企合作协议书
2014/04/16 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
冰雪公主观后感
2015/06/16 职场文书
好员工观后感
2015/06/17 职场文书
会议主持词通用版
2019/04/02 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
修改并编译golang源码的操作步骤
2021/07/25 Golang
SQL Server Agent 服务无法启动
2022/04/20 SQL Server