php

php

php相关问题
html+css

html+css

JavaScript

JavaScript

js,jquery,vue.js等
Linux

Linux

Linux操作系统
Mysql

Mysql

各种资源

各种资源

开发工具,手册等
就业指导

就业指导

UI设计

UI设计

教学视频分享

教学视频分享

PHP5.*和PHP7.1.*之间的小差别

php刘老师 发表了文章 • 0 个评论 • 65 次浏览 • 2018-04-11 00:24 • 来自相关话题

前几天在学习织梦建站,好容易搞明白了织梦的玩法,找出来了几套能用的模板,心里一松;然后来又提出了需求,要更改PHP环境,由5.6改为7.1,结果杯具了,出现了让我瞬间懵逼的问题:数据不能备份!
很奇怪啊,怎么会出现这种情况呢,然后网上搜各种答案,发现最多的说法是文件夹写入权限的问题,然后就各种折腾,结果被这个问题整整折磨了一天时间!
最后在大牛的指导下终于找到了问题的根源所在:
如下代码:

<?php $test=''; $test[2]=111; var_dump($test); ?>

在PHP5.*环境执行之后结果为:

array (size=1)
   2 => int 111

而在PHP7.1.*环境执行之后结果为:

string(3) " 1"

两个结果大相径庭,在PHP5.*中我们定义一个空变量$test,我们姑且认为此时的空变量$test是“弱类型”的,当我们使用的时候把他作为字符串类型赋值时他就为字符串类型,当我们把他作为数组类型赋值时他就为数组类型;
而在PHP7.1.*中我们定义一个空变量$test,这个时候这个空变量就变成了“强类型”,PHP7.1.*强制的把他认为是一个字符串类型,不管我们以何种方式给$test赋值,都会被默认为给赋值给一个字符串,所以得到的$test永远都是字符串类型,而后期我们把$test当做数组从中取值的时候,就不可能取得到了。
 
其实后来想想,花了这么多时间去解决这个问题非常的不值得,我们在开发过程中遇到陌生问题的时候,万万不能一口断定是某一个地方某一个原因的差错,这样容易走进一个死胡同再也绕不出来,而真实情况并不是我们笃定的那样,根本找错了方向,浪费了无谓的时间。 查看全部
前几天在学习织梦建站,好容易搞明白了织梦的玩法,找出来了几套能用的模板,心里一松;然后来又提出了需求,要更改PHP环境,由5.6改为7.1,结果杯具了,出现了让我瞬间懵逼的问题:数据不能备份!
很奇怪啊,怎么会出现这种情况呢,然后网上搜各种答案,发现最多的说法是文件夹写入权限的问题,然后就各种折腾,结果被这个问题整整折磨了一天时间!
最后在大牛的指导下终于找到了问题的根源所在:
如下代码:


<?php $test=''; $test[2]=111; var_dump($test); ?>


在PHP5.*环境执行之后结果为:


array (size=1)
   2 => int 111


而在PHP7.1.*环境执行之后结果为:


string(3) " 1"


两个结果大相径庭,在PHP5.*中我们定义一个空变量$test,我们姑且认为此时的空变量$test是“弱类型”的,当我们使用的时候把他作为字符串类型赋值时他就为字符串类型,当我们把他作为数组类型赋值时他就为数组类型;
而在PHP7.1.*中我们定义一个空变量$test,这个时候这个空变量就变成了“强类型”,PHP7.1.*强制的把他认为是一个字符串类型,不管我们以何种方式给$test赋值,都会被默认为给赋值给一个字符串,所以得到的$test永远都是字符串类型,而后期我们把$test当做数组从中取值的时候,就不可能取得到了。
 
其实后来想想,花了这么多时间去解决这个问题非常的不值得,我们在开发过程中遇到陌生问题的时候,万万不能一口断定是某一个地方某一个原因的差错,这样容易走进一个死胡同再也绕不出来,而真实情况并不是我们笃定的那样,根本找错了方向,浪费了无谓的时间。

PHP引用赋值

php刘老师 发表了文章 • 0 个评论 • 62 次浏览 • 2018-01-31 18:54 • 来自相关话题

PHP变量间的赋值方式有两种:
1、传值赋值
2、引用赋值
 
1、传值赋值
传值赋值是将变量的值复制一份赋值给新的变量,这个新的变量被分配了新的内存地址,修改这两个变量的值时互不影响。例如:
$a=$b意指$b变量的值复制一份赋给$a,而且$a和$b分别指向不同的内存地址,两者改变互不影响。以下代码

$a=1;
$b=$a;
$a=2;
echo $b  //1,$a值得改变不会影响$b,反之亦然

 
2、引用赋值
官方文档的解释是,可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。例如:

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>

这时候$a传给函数的其实是$a所占的内存地址,这样在函数体里操作$var也能对$a的值进行更改,例如$a=&$b意指将$b的内存地址赋给$a,此时两个变量指向同一个内存地址,所以一旦改变其中一个的值,另一个必定随之改变。可以这样理解,一个人拥有了两个身份,那么不管是哪个身份做出的改变,都是这个人的改变。以下例子:

<?php 
$a = 1;  
$b = &$a; // 通过 $b 引用 $a 
$b = 2; // 修改 $b 变量 
echo $b; 
echo $a; // 输出2,$a 的值也被修改 
?> 

  查看全部
PHP变量间的赋值方式有两种:
1、传值赋值
2、引用赋值
 
1、传值赋值
传值赋值是将变量的值复制一份赋值给新的变量,这个新的变量被分配了新的内存地址,修改这两个变量的值时互不影响。例如:
$a=$b意指$b变量的值复制一份赋给$a,而且$a和$b分别指向不同的内存地址,两者改变互不影响。以下代码


$a=1;
$b=$a;
$a=2;
echo $b  //1,$a值得改变不会影响$b,反之亦然


 
2、引用赋值
官方文档的解释是,可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。例如:


<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>


这时候$a传给函数的其实是$a所占的内存地址,这样在函数体里操作$var也能对$a的值进行更改,例如$a=&$b意指将$b的内存地址赋给$a,此时两个变量指向同一个内存地址,所以一旦改变其中一个的值,另一个必定随之改变。可以这样理解,一个人拥有了两个身份,那么不管是哪个身份做出的改变,都是这个人的改变。以下例子:


<?php 
$a = 1;  
$b = &$a; // 通过 $b 引用 $a 
$b = 2; // 修改 $b 变量 
echo $b; 
echo $a; // 输出2,$a 的值也被修改 
?>