电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

你真的了解PHP中的引用符號(&)嗎

瀏覽:129日期:2022-09-07 13:54:55
引言

最近接手了五六年前的老項目,用的是CI2.0框架,在看框架源碼的時候有個地方讓我楞了一下,于是有了這篇文章。

字符&的最早歷史可以追溯到公元1世紀,最早是拉丁語et (意為and)的連寫。

&是指邏輯上表示兩者屬于缺一不可的關系,還表示意思是一個人和另外一個人之意,與and同義。

&在PHP項目中是經常使用的一個操作符, 例如按位與丶邏輯操作丶引用變量丶引用傳遞丶引用返回。

按位與

$a & $b 將把 $a 和 $b 中都為1的位設為1.

奇偶數判斷

整數與1進行按位與運算,運算結果為1表示為奇數, 運算結果為0表示為偶數。例如:

十進制 二進制 5 101 1 001

6和1進行按位與&, 得到結果為0。

十進制 二進制 6 110 1 001

但是項目中我們都不會這么寫, 都是使用n % 2 == 0, 因為奇偶性判斷使用%的效率比較高,也比較容易理解。

用戶權限判斷

假設有個系統中有用戶權限分配模塊, 其權限設置如下:

權限名稱 權限值 查看 1 新增 2 修改 4 刪除 8

那么存儲該用戶的權限不需要存儲逗號分割的字符串1,2,4,8, 只需要存儲一個整形:15即可。

如果用戶1擁有新增丶查看丶修改權限, 那么需要存儲的權限值為: 1+2+4=7。

如果用戶2擁有所有權限, 那么需要存儲的權限值為:1+2+4+8=15。

檢查用戶1是否有修改權限:7 & 4結果為4, 表示擁有修改權限。

檢查用戶2是否有刪除權限:15 & 8結果為8, 表示擁有刪除權限。

條件操作符

$a && $b只有$a和$b均為真,結果才為真。

引用變量

PHP的引用允許你用兩個變量來指向同一個內容。無論對哪個變量名的值進行了修改,其他變量名訪問的內容也會隨之改變。

與C語言中的指針是有差別的。C語言中的指針里面存儲的是變量的內容,在內存中存放的地址。

<?php$a = 10;$b = &$a; $a = 11;var_dump($a, $b); // 輸出11, 11$b = 12;var_dump($a, $b); // 輸出12, 12

foreach循環時加&符號會有什么問題? 例如以下代碼能正常輸出期望值嗎?

<?php$values = [’Python’, ’Php’, ’Go’];foreach ($values as &$value){ $value = strtoupper($value);}foreach ($values as $value){ echo $value . PHP_EOL;}

預期結果是: [’PYTHON’, ’PHP’, ’GO’] 實際結果是[’PYTHON’, ’PHP’, ’PHP’]。

這是因為第一次foreach中使用了引用, 使$value成為了引用變量, 并且$arr[2]和$value指向了同一個地址空間(共享變量值), 第二次foreach時, 不斷的將$values中的值賦給$value, 導致$arr[2]的值也被修改了。

引用傳遞

可以將一個變量通過引用傳遞給函數,這樣該函數就可以修改其參數的值。

/** * 對傳入的值進行平方 * Author: ClassmateLin * Email: classmatelin.site@gmail.com * Site: https://www.classmatelin.top * @param $n */function f(&$n){ $n *= $n;}$n = 2;f($n);var_dump($n); // 輸出4

按值傳遞是需要對變量進行拷貝, 引用傳遞是同一內存空間。

如果是大型字符串或對象,那么使用引用傳遞比按值傳遞可以節省一些內存, 但是使用引用傳遞代碼可讀性稍微低點。

引用返回

函數的引用返回,在方法前加&符號定義。同時需要接收返回值也需要&, 否則將不起作用, 例如:

<?phpclass Foo { public $value = 10; /** * 返回value, 引用返回, 對返回的值修改會影響到該值。 * Author: ClassmateLin * Wechat: ClassmateLin_ * Email: classmatelin.site@gmail.com * Site: https://www.classmatelin.top * @return int */ public function &getValue() {return $this->value; }}$foo = new Foo();$val1 = $foo->getValue();$val1 = 11; // $val1沒有用&接收,不是引用, 修改不會影響實例$foo的值.var_dump($val1, $foo->getValue()); // 輸出11, 10$val2 = &$foo->getValue(); // $val2是引用$val2 = 13;var_dump($val2, $foo->getValue()); // 輸出13, 13

你真的了解PHP中的引用符號(&)嗎

總結

到此這篇關于PHP中引用符號(&)的文章就介紹到這了,更多相關PHP引用符號&內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: PHP
相關文章:
主站蜘蛛池模板: 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 陶瓷砂磨机,盘式砂磨机,棒销式砂磨机-无锡市少宏粉体科技有限公司 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 广东教师资格网-广东教师资格证考试网 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 首页_中夏易经起名网| 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 酒万铺-酒水招商-酒水代理 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 长城人品牌官网| 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 |