php中按引用传递参数,如何通过PHP中的引用传递可变参数的参数?
假设有可能,通过引用变量函数来传递参数,而不会在
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中的引用传递可变参数的参数?相关推荐
- python post请求参数为list_利用post向后台传递数组或者list参数
在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用到了批量更改数据状态功能. 在前台可以获取每条数据的ID,但是如何通过数组方式传递给后台? 目前有两种方式可行: 方式 ...
- Java中传参数--值传递和引用传递
** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...
- python引用参数在哪里_参数在Python中是否通过引用传递
list = [element] + list创建一个新列表并覆盖,um,list的原始值.我没有将元素添加到现有列表中,因此它不会演示通过引用传递.相当于:list2 = [element] + l ...
- Java主方法引用传递_java方法中的参数传递是值传递还是引用传递(转)
1.当参数变量为基本数据类型或者字符串时: ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } .. ...
- php中案值传递和安引用传递,PHP里的值传递与引用传递
PHP中存在着值传递和引用传递.后者需要使用地址符&来标识变量.使用赋值操作举例说明如下: 1.值传递 1)基本数据类型: $a = 1; $b = $a; $b += 2; echo &qu ...
- Java中值传递还是引用传递(三个例子说明)
结论:Java中只有值传递 很多人困惑既然是值传递,为什么有的时候还能改变原对象属性呢? 值传递和引用传递区别:值传递会创建副本作为参数,而引用传递是直接作为参数 验证结论: 基本类型时 public ...
- Java方法中的引用传递
Java方法中的引用传递 背景 基础知识 探究 定义Person类 写定义测试类进行测试 运行结果 分析 另一个例子 运行结果 分析和结论 背景 最近复习java相关的知识,看到有一个资料里写道:Ja ...
- java中的就近原则、方法中值传递和引用传递的区别、什么是构造方法、this关键字用法、什么是封装
你知道java中的就近原则嘛? package com.Test.java; /*** * 在java里面有一个"就近原则"详情可以参照下面代码**/public class Ac ...
- Lua中的值传递和引用传递
老规矩,直接代码 值传递 -- 例1 a = 1 b = a b = 2 print("a ==",a) -- 输出:a == 1-- 例2 a = "this is s ...
最新文章
- TypeScript学习笔记之 接口(Interface)
- 设计模式:模板方法(Template Method Pattern)
- PAT甲级题目翻译+答案 AcWing(动态规划)
- 将宽度赋给高度_人生应知长度、懂宽度、有高度
- Java接口中的成员变量为什么必须是public static final?
- Form各键盘触发子所对应的“按键”
- 英语总结系列(二十二):Baby偶遇GCT
- Java学习笔记之设计模式(7)单例模式
- 如何编写PMP项目管理中的项目立项书
- 三星平板电脑html文件放在哪里,三星Tab3怎么连接电脑?三星Tab3平板电脑连接电脑的方法图解...
- html文档含有阿拉伯文,html – iOS中包含自定义字体的阿拉伯文字
- 【鸿蒙】鸿蒙App应用-《记账软件》开发步骤
- JAXB控制CDATA节点转义
- 大创会议议程2021-10-17
- 错误记录-java idea执行k8s https api报错 should not be presented in certificate_request
- windows10配置jdk8和jdk11并存和切换
- 双11直播技术强力后盾——阿里云导播服务功能详解与场景应用
- 大数据剖析:想与北上争雄,深圳到底还差在哪儿?
- css中的@mixin的用法
- 生意大展示:49种简易创业方法大比拼
热门文章
- CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记
- C++的黑科技 利用一个字符对字符串进行分离
- agx 安装ros opencv_怎样在ROS下实现基于YOLO的px4无人机目标检测?
- php check name,checkname.php
- OpenLayers中地图缩放级别的设置方法
- private MyAddin(System.IntPtr mdlDesc) : base(mdlDesc)这一步后就出bug
- 【模板小程序】求M~N范围内的质数个数
- 02 - Unit06:弹出对话框
- eclipse快速定位java对应的class
- 【0805作业】模拟多人爬山