假设有可能,通过引用变量函数来传递参数,而不会在

PHP中生成警告?我们不能再使用’&’运算符在函数调用中,否则我会接受(尽管这样会很容易出错,编码器应该忘记它).

这是什么启发是我发掘的旧的MySQLi包装课程(这些天,我只是使用PDO).包装器和MySQLi类之间的唯一区别是包装器抛出异常而不是返回FALSE.

class DBException extends RuntimeException {}

...

class MySQLi_throwing extends mysqli {

...

function prepare($query) {

$stmt = parent::prepare($query);

if (!$stmt) {

throw new DBException($this->error, $this->errno);

}

return new MySQLi_stmt_throwing($this, $query, $stmt);

}

}

// I don't remember why I switched from extension to composition, but

// it shouldn't matter for this question.

class MySQLi_stmt_throwing /* extends MySQLi_stmt */ {

protected $_link, $_query, $_delegate;

public function __construct($link, $query, $prepared) {

//parent::__construct($link, $query);

$this->_link = $link;

$this->_query = $query;

$this->_delegate = $prepared;

}

function bind_param($name, &$var) {

return $this->_delegate->bind_param($name, $var);

}

function __call($name, $args) {

//$rslt = call_user_func_array(array($this, 'parent::' . $name), $args);

$rslt = call_user_func_array(array($this->_delegate, $name), $args);

if (False === $rslt) {

throw new DBException($this->_link->error, $this->errno);

}

return $rslt;

}

}

困难在于在包装器上调用诸如bind_result的方法.可以明确定义恒定函数(例如bind_param),允许通过引用. bind_result,但是,需要所有参数都是通过引用.如果您在MySQLi_stmt_throwing的实例上调用bind_result,那么这些参数是通过值传递的,绑定将不会占用.

try {

$id = Null;

$stmt = $db->prepare('SELECT id FROM tbl WHERE ...');

$stmt->execute()

$stmt->bind_result($id);

// $id is still null at this point

...

} catch (DBException $exc) {

...

}

由于上述课程不再使用,这个问题只是一个好奇心.封装类的替代方法是不相关的.定义一个使用Null默认值的一组参数的方法是不正确的(如果定义20个参数,但该函数是用21调用的).答案甚至不需要用MySQL_stmt_throwing的方式编写;它仅仅是提供一个具体的例子.

php中按引用传递参数,如何通过PHP中的引用传递可变参数的参数?相关推荐

  1. python post请求参数为list_利用post向后台传递数组或者list参数

    在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用到了批量更改数据状态功能. 在前台可以获取每条数据的ID,但是如何通过数组方式传递给后台? 目前有两种方式可行: 方式 ...

  2. Java中传参数--值传递和引用传递

    ** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...

  3. python引用参数在哪里_参数在Python中是否通过引用传递

    list = [element] + list创建一个新列表并覆盖,um,list的原始值.我没有将元素添加到现有列表中,因此它不会演示通过引用传递.相当于:list2 = [element] + l ...

  4. Java主方法引用传递_java方法中的参数传递是值传递还是引用传递(转)

    1.当参数变量为基本数据类型或者字符串时: ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } .. ...

  5. php中案值传递和安引用传递,PHP里的值传递与引用传递

    PHP中存在着值传递和引用传递.后者需要使用地址符&来标识变量.使用赋值操作举例说明如下: 1.值传递 1)基本数据类型: $a = 1; $b = $a; $b += 2; echo &qu ...

  6. Java中值传递还是引用传递(三个例子说明)

    结论:Java中只有值传递 很多人困惑既然是值传递,为什么有的时候还能改变原对象属性呢? 值传递和引用传递区别:值传递会创建副本作为参数,而引用传递是直接作为参数 验证结论: 基本类型时 public ...

  7. Java方法中的引用传递

    Java方法中的引用传递 背景 基础知识 探究 定义Person类 写定义测试类进行测试 运行结果 分析 另一个例子 运行结果 分析和结论 背景 最近复习java相关的知识,看到有一个资料里写道:Ja ...

  8. java中的就近原则、方法中值传递和引用传递的区别、什么是构造方法、this关键字用法、什么是封装

    你知道java中的就近原则嘛? package com.Test.java; /*** * 在java里面有一个"就近原则"详情可以参照下面代码**/public class Ac ...

  9. Lua中的值传递和引用传递

    老规矩,直接代码 值传递 -- 例1 a = 1 b = a b = 2 print("a ==",a) -- 输出:a == 1-- 例2 a = "this is s ...

最新文章

  1. TypeScript学习笔记之 接口(Interface)
  2. 设计模式:模板方法(Template Method Pattern)
  3. PAT甲级题目翻译+答案 AcWing(动态规划)
  4. 将宽度赋给高度_人生应知长度、懂宽度、有高度
  5. Java接口中的成员变量为什么必须是public static final?
  6. Form各键盘触发子所对应的“按键”
  7. 英语总结系列(二十二):Baby偶遇GCT
  8. Java学习笔记之设计模式(7)单例模式
  9. 如何编写PMP项目管理中的项目立项书
  10. 三星平板电脑html文件放在哪里,三星Tab3怎么连接电脑?三星Tab3平板电脑连接电脑的方法图解...
  11. html文档含有阿拉伯文,html – iOS中包含自定义字体的阿拉伯文字
  12. 【鸿蒙】鸿蒙App应用-《记账软件》开发步骤
  13. JAXB控制CDATA节点转义
  14. 大创会议议程2021-10-17
  15. 错误记录-java idea执行k8s https api报错 should not be presented in certificate_request
  16. windows10配置jdk8和jdk11并存和切换
  17. 双11直播技术强力后盾——阿里云导播服务功能详解与场景应用
  18. 大数据剖析:想与北上争雄,深圳到底还差在哪儿?
  19. css中的@mixin的用法
  20. 生意大展示:49种简易创业方法大比拼

热门文章

  1. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记
  2. C++的黑科技 利用一个字符对字符串进行分离
  3. agx 安装ros opencv_怎样在ROS下实现基于YOLO的px4无人机目标检测?
  4. php check name,checkname.php
  5. OpenLayers中地图缩放级别的设置方法
  6. private MyAddin(System.IntPtr mdlDesc) : base(mdlDesc)这一步后就出bug
  7. 【模板小程序】求M~N范围内的质数个数
  8. 02 - Unit06:弹出对话框
  9. eclipse快速定位java对应的class
  10. 【0805作业】模拟多人爬山