在类的实例化过程中,可以带或不带参数,那么构造函数将如何处理这些参数呢?为了使构造函数具有通用性,在定义构造函数时,一般不带参数,然后在其内部对参数情况进行处理。下面代码显示了一个完整的通用Person类。

  1. <?php
  2. /**
  3. * __construct() 不需设置参数,用php内置函数自动获取
  4. *
  5. * 在下面示例中,在构造函数里使用了内置函数func_get_args()获取到所有的参数,
  6. * func_num_args()获取到参数的数量,然后使用判断语句,执行其中一个用户自定义方法,
  7. * 从而实现了构造函数带不定参数个数的执行方法。
  8. */
  9. class Person{ // 定义Person类
  10. private $name; // 定义name属性
  11. private $name2;
  12.  
  13. public function __construct() {
  14. $array=func_get_args(); //获取所有参数
  15. $num=func_num_args(); //获取参数的数量
  16.  
  17. if(method_exists($this, $f='func'.$num)){ //重要:检查类中方法是否存在
  18. call_user_func_array(array($this, $f), $array); // 执行一个方法与参数数组
  19. }
  20.  
  21. }
  22.  
  23. public function func0() {
  24. $this->name = "没有参数时输出:唐僧";
  25. }
  26.  
  27. public function func1($value) {
  28. $this->name = $value;
  29. }
  30.  
  31. public function func2($value1, $value2) {
  32. $this->name = $value1;
  33. $this->name2 = $value2;
  34. }
  35.  
  36. function getName(){
  37. return $this->name;
  38. }
  39.  
  40. function getName2(){
  41. $arr[0] = $this->name;
  42. $arr[1] = $this->name2;
  43. return $arr;
  44. }
  45.  
  46. function setName($value){
  47. $this->name = $value;
  48. }
  49.  
  50. function __destruct() {
  51. print "<br>对象被销毁";
  52. }
  53. }
  54.  
  55. $person = new Person();
  56. echo $person->getName() . "<br>";
  57.  
  58. $person2 = new Person("孙悟空");
  59. echo $person2->getName() . "<br>";
  60.  
  61. $person3 = new Person("猪八戒", "沙和尚");
  62. print_r($person3->getName2());
  63. ?>

执行后的效果图:

php中类的不定参数使用示例的更多相关文章

  1. 深入浅出ES6(五):不定参数和默认参数

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...

  2. 深入浅出ES6:不定参数和默认参数

    不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例如,String.prototype.concat方法就可以接受任意数量的字符串参数.ES6提供了一种编写可变参函数的新 ...

  3. Java不定参数

    先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: public class VariArgs { public static void main(String[] args) { t ...

  4. C和C++中的不定参数

    在初学C的时候,我们都会用到printf函数来写Hello World的程序.在我们看printf函数的声明时,会看到类似于下面代码 int printf(const char * __restric ...

  5. go语言基础之不定参数的传递

    1.不定参数的传递 示例1: package main //必须有一个main包 import "fmt" func myfunc(tmp ...int) { for _, dat ...

  6. Java的不定参数(eg:Object...)(转)

    第一个例子: public class VariArgs { public static void main(String[] args) { test(); test("aaa" ...

  7. golang中不定参数与数组切片的区别

    package main import "fmt" func main() { myfunc1(, , , ) //传递不定数量的参数 myfunc2([], , , }) //传 ...

  8. C技巧:结构体参数转成不定参数

    下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...

  9. 不定参数函数原理以及实现一个属于自己的printf函数

    一.不定参数函数原理 二.实现一个属于自己的printf函数 参考博文:王爽汇编语言综合研究-函数如何接收不定数量的参数

随机推荐

  1. 如何自动加载scratch3.0的页面上实现自动加载原有的作品

    首先,我们在安装scratch3.0后,浏览器默认打开的是编程的页面.如下图: 那么我们希望开发一个功能,就是打开的时候默认加入某一个SB3的开发文件 1.首先,我们需要有一个.SB3的开发文件,建议 ...

  2. Python 爬虫js加密破解(三) 百度翻译 sign

    第一步: 模拟抓包分析加密参数 第二步: 找到加密字段 调试出来的sign和抓取得到的数据一致,都是 275626.55195 第三部: 分析js加密方法 第四部:运行js代码: 仅供交流学习使用

  3. linux /lib64/libc.so.6: version `GLIBC_2.17′ not found

    使用root权限安装Glances,需要用到glibc,安装失败后所有命令都不好用了,执行回报“/lib64/libc.so.6: version `GLIBC_2.17′ not found ”的错 ...

  4. Chirp信号及其生成

    Chirp信号是一个典型的非平稳信号,在通信.声纳.雷达等领域具有广泛的应用. 简介 Chirp译名:啁啾(读音:“周纠”),是通信技术有关编码脉冲技术中的一种术语,是指对脉冲进行编码时,其载频在脉冲 ...

  5. LeetCode 873. Length of Longest Fibonacci Subsequence

    原题链接在这里:https://leetcode.com/problems/length-of-longest-fibonacci-subsequence/ 题目: A sequence X_1, X ...

  6. php解决大文件断点续传

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  7. 在触发器中使用{ITEM.LASTVALUE}时在首页问题栏信息显示不全

    在触发器中使用了系统宏变量,当条件满足时,如果这个宏代表的内容超过了20个字符,那么在首页信息就显示不全,会有一堆省略号 感谢https://blog.csdn.net/yu415907917/art ...

  8. 浏览器端使用less

    一.思路 ①less无法在浏览器中直接使用,浏览器不能识别 ②通过less解析插件less.js(JavaScript插件)可以把less文件解析成css代码(下载地址) 二.具体应用 ①less.j ...

  9. THUWC2020 划船记

    PS:THUWC2020在2019年 Day 1 考场外的太懒了不写了. 三题题目大意: T1: T2: 给定一个\(n(\leq 10^5)\)个结点的有向图,每条边有个limit,表示经过这条边l ...

  10. Python 企业面试题集锦之Python基础

    △字符串.列表.元组.字典每个常用的5个方法? 字符串: 字符串用单引号(')或双引号(")括起来,不可变. s.strip(c):去除空格或指定的字符c:lstrip/rstrip: s. ...