2020-10-28
php 多个变量指向同一个引用($b = &$a)用法分析

php 多个变量指向同一个引用($b = &$a)用法分析

本文实例讲述了php 多个变量指向同一个引用($b = &$a)用法。分享给大家供大家参考,具体如下: 引用是什么? 引用就是多个变量指向同一个内存区域地址。如我们经常用的实例一个类,就是内存中开辟了一个区域存储实例的类,实例赋值给变量就是让这个变量指向这个内存区域。 多个变量指向同一个引用有什么好处? 节约了内存空间,多个变量指向同一个内存地址,在调用的时候多个变量都是指向的同一个内存地址。 多个变量指向同一个引用的缺点 要注意使用安全,即是由于多个变量都是指向的同一个内存地址,其中一个变量更改了某个属性,其它的变量调用的时候都是用的已经更改的实例。 在php 中我们为一个变量赋值的时候会在内存中开辟一个区域存储该值。那么我们将这个变量赋值给另一个变量的时候会在内存中重新开辟一个区域去存储改值吗? 我做了如下实验 <?php $d = "aaa"; $c = $d; echo $c . "<br />"; $d = "bbb"; echo $c . "<br />"; /** * 执行结果是 * aaa * aaa */ ?> 看到这里 不知道你理解了没有,创建的变量$d 并为之赋初始值aaa 再将$d 赋值给$c,之后输出$c 然后更改$d的值,在输出$c。这个实验告诉我们,$d再给$c赋值的时候是在内存中重新开辟了一个区域的。 那么,我们怎么才能让$d和$c 都指向一个引用呢? 查了下资料 如下方法 让两个变量指向同一个内存地址 <?php $a = "123"; $b = &$a; echo $b."<br />"; $a = "456"; echo $b; /** * 运行结果如下 * 123 * 456 */ ?> 我更改了一下变量的名字。方便测试发现区别。在这里我们可以看到 $b=&$a 其中&符号的作用就是让$b 指向的是$a的内存区域,而不是重新开辟一个区域。所以当更改$a的值的时候$b也会随着变化。 前面我们实验的对象是基本字符串,现在我们来看下类是否遵从这个规则 <?php class Demo { public $demo = "aaaa"; } $demo1 = new Demo(); $demo2 = $demo1; echo $demo2->demo . "<br />"; $demo1->demo = "bbbb"; echo $demo2->demo . "<br />"; /** * 运行结果 * aaaa * bbbb */ ?> 我这里并没有&符号指定$demo2必须指向$demo1 的内存区域,所以关于类,当一个实例变量赋值给另一个变量的时候默认就是两个变量指向同一个引用; php 的引用我觉得没有 java的好用,也许是这门语言本身还在发展,很多处理还没有那么方便完善。 java初去基本数据类型(int、long、byte、short、char、boolean、float、double等),两个变量赋值都是指向同一个内存地址,而且不用你特意去指定。 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。...
技术教程 1340次浏览 0条评论
2020-10-28
php查看一个变量的占用内存的实例代码

php查看一个变量的占用内存的实例代码

事例: php版本为7.2 <?php echo memory_get_usage() , '<br>'; $start = memory_get_usage(); $a = Array(); for ($i=0; $i<1000; $i++) { $a[$i] = $i + $i; } $mid = memory_get_usage(); echo memory_get_usage() , '<br>'; for ($i=1000; $i<2000; $i++) { $a[$i] = $i + $i; } $end = memory_get_usage(); echo memory_get_usage() , '<br>'; echo 'argv:', ($mid - $start)/1000 ,'bytes' , '<br>'; echo 'argv:',($end - $mid)/1000 ,'bytes' , '<br>'; echo 'Memory:', ($mid - $start)/1024 ,'k' , '<br>'; echo 'Memory:',($end - $mid)/1024 ,'k' , '<br>'; 输出是: 389336 418056 442632 argv:28.72bytes argv:24.576bytes Memory:28.046875k Memory:24k 返回当前分配给你的 PHP 脚本的内存量,单位是字节(byte)。 大概了解1000个元素的整数数组需要占用 28k 内存,平均每个元素占用 28 个字节 memory_get_usage() 返回的结果并不是全是被数组占用了,还要包括一些 PHP 运行本身分配的一些结构,可能用内置函数生成的数组更接近真实的空间: <?php $start = memory_get_usage(); $a = array_fill(0, 10000, 1); $mid = memory_get_usage(); //10k elements array; echo 'argv:', ($mid - $start )/10000,'byte' , '<br>'; echo 'Memory:', ($mid - $start)/1024 ,'k' , '<br>'; $b = array_fill(0, 10000, 1); $end = memory_get_usage(); //10k elements array; echo 'argv:', ($end - $mid)/10000 ,'byte' , '<br>'; echo 'Memory:',($end - $mid)/1024 ,'k' , '<br>'; 得到: argv:54.5792byte argv:54.5784byte argv:39.736byte Memory:388.046875k argv:39.736byte Memory:388.046875k 大概了解10000个元素的整数数组需要占用 388k 内存 ,从这个结果来看似乎一个数组元素大约占用了39个字节左右。 内容补充: php获取变量所占内存大小的方法 $start_memory = memory_get_usage(); $foo = "Some variable"; echo memory_get_usage() - $start_memory; 这个可以获取所有变量类型的大小 strlen($foo) 这个可以获取当前字符串的字节大小 除以8就是位大小 到此这篇关于php查看一个变量的占用内存的实例代码的文章就介绍到这了,更多相关php怎么查看一个变量的占用内存内容请搜索梦主博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持梦主博客!...
技术教程 1370次浏览 0条评论
2020-10-28
php变量与字符串的增删改查操作示例

php变量与字符串的增删改查操作示例

本文实例讲述了php变量与字符串的增删改查操作。分享给大家供大家参考,具体如下: 变量的使用 <?php //告诉浏览器以什么编码方式解析什么类型的文档,防止中文乱码 header("Content-type: text/html; charset=utf-8"); // 整型的例子 // 声明整型 $var=123; // 输出一个或者多个字符串 echo $var; //但因变量的详细信息,可以一次打印一个或者多个变量的详细信息 // H:\dev\wamp64\www\demo1\5-test.php:9:int 123 var_dump($var); // 声明八进制整数 $var=0123; echo $var; var_dump($var); // 声明十六进制整数 $var=0xff00; echo $var; var_dump($var); // 一次声明多个参数,并且赋值相同 $a=$b=$c=123; // 多个参数打印 var_dump($a,$b,$c); // 浮点型有误差 $float=12.3; var_dump($float); // 科学计数法 $float=2e3;//2 乘以10的三次方2000 var_dump($float); $float=2E-2;//2的-10次方0.02 var_dump($float); // 布尔类型 $bool1=true; $bool2=TRUE; $bool3=false; $bool4=FALSE; var_dump($bool1,$bool2,$bool3,$bool4); // if语句 $dream=true; if($dream){ echo "那么我就再北京三环买一套房子"; }else { echo "老实写代码"; } // 字符串类型 // 字符串要写到定界符当中 // 单引号,双引号,heredoc nowdoc $username='king'; $email="[email protected]"; $string='';//空字符串 var_dump($username,$email,$string); //s echo $username,'<br/>双引号解析变量:->'; echo "$username"; echo "<br> 单引号不解析变量:所以效率更高一点->"; echo '$username'; // He Said "I'm Fine // 如果内容和定界符有冲突 要使用转义符\ echo "<br/>"; $str="He Said \"I'm Fine"; echo "$str"; //单引号只解析\' \\两个转义符 $str='1\n1\t1\1\r1\\1\'1\$111111111111111111'; echo $str; echo "<br/>"; //双引号解析所有的转义符 $str="1\n1\t1\1\r1\\1\'1\$111111111111111111"; echo $str; echo "<hr/>"; $var=123; //$var的值为123 echo '$var 的值为$var'; echo "<br/>"; echo "\$var 的值为$var"; echo "<hr/>"; $username='king'; //php 殷勤在解析变量的时候会尽肯能多的向后取合法字符 认为取的越多 含义越明确 //echo "名称$username是我"; echo "名称$username 是我"; //花括号 php变量中的变量括成一个整体图 echo "名称${username}是我"; echo "名称{$username}是我"; //可以对字符串中的指定字符做增删改查的操作 字符串操作 <?php //对于字符串中的指定字符串做增删改插操作 $string='abcdef'; //查找 echo $string{0}; echo $string{2}; echo $string{5}; //修改 //注意,修改的时候只能一对一 $string{1}='z'; echo " <br/>"; echo $string; $string{4}='!'; echo " <br/>"; echo $string; echo "<hr/>"; $string='abc'; $string{0}="Hello "; echo "$string"; echo "<hr/>"; $string='你好'; var_dump($string);//:string '你好' (length=6) echo "<hr/>"; //删除 $string='abcef'; $string{2}=''; echo "$string"; echo "<hr/>"; $string{0}=''; echo "$string"; //添加字符 echo "<br/>"; $string='abc'; $string{3}='d'; echo "$string"; echo "<br/>"; $string='abc'; $string{5}='e'; echo "$string"; echo "<br/>"; var_dump($string);//string 'abc e' (length=6) /* $string='king'; 1.输出首字母 2。将字符串中n变成o 3.将字符串中的i删除掉 4.再字符串末尾添加一个叹号 */ echo "<br/>"; $string='king'; echo "1.输出首字母:{$string{0}}"; $string{2}='o'; echo "<br/>"; echo "将字符串中n变成o:$string"; echo "<br/>"; $string{1}=''; echo "将字符串中的i删除掉 $string"; $string{4}='!'; echo "<br/>"; echo "将再字符串末尾添加一个叹号 $string"; var_dump($string); 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。...
技术教程 1290次浏览 0条评论
微信二维码