PHP变量值更改

PHP变量值更改,php,Php,用代码解释这个问题更简单。请注意,函数位于不同的文件中,并包含在页面上 $announcements = $dbc->query($q)->results(); //Returns array of objects $announcements = prepareMessage($announcements); //Adds html tags to values $latest = $announcements[0]; //Assign first index to variabl

用代码解释这个问题更简单。请注意,函数位于不同的文件中,并包含在页面上

$announcements = $dbc->query($q)->results(); //Returns array of objects
$announcements = prepareMessage($announcements); //Adds html tags to values
$latest = $announcements[0]; //Assign first index to variable
$announcements = truncate($announcements); //Truncate announcement text

function prepareMessage($message) {
    foreach($message as $values => $key) {
        $key->title = '<h2>'.$key->title.'</h2>';
        $key->name = '<p>'.$key->name.'</p>';
        $key->date = '<small>'.humanDate($key->date).'</small>';
    }

    return $message;
}

function truncate($message) {
    foreach($message as $values => $key) {
        $key->announcement = substr($key->announcement, 0, 50) . '...</p>';
    }

    return $message;
}
$运行该行之前的最新值

[announcement] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
[announcement] =>
Lorem ipsum dolor sit amet, consectetur adipisc...
$运行该行后的最新值

[announcement] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
[announcement] =>
Lorem ipsum dolor sit amet, consectetur adipisc...

所以我的问题是,$latest的值为什么会改变?

您正在使用代码中的truncate函数将$latest的值减少到50个字符

要获得$latest的完整值,请使用以下代码:

$announcements = $dbc->query($q)->results(); //Returns array of objects
$announcements = prepareMessage($announcements); //Adds html tags to values
$latest = $announcements[0]; //Assign first index to variable


function prepareMessage($message) {
    foreach($message as $values => $key) {
        $key->title = '<h2>'.$key->title.'</h2>';
        $key->name = '<p>'.$key->name.'</p>';
        $key->date = '<small>'.humanDate($key->date).'</small>';
    }

    return $message;
}
$announcements=$dbc->query($q)->results()//返回对象数组
$announcements=prepareMessage($announcements)//将html标记添加到值
$latest=$announcements[0]//将第一个索引分配给变量
函数prepareMessage($message){
foreach($value=>$key的消息){
$key->title=''.$key->title'';
$key->name='。$key->name'

'; $key->date=''.humanDate($key->date)。''; } 返回$message; }
或者您可以更改此行显示的字符数(其中“50”是要显示的字符数,“0”是从何处开始)

$key->announcement=substr($key->announcement,0,50)。”

",;
您正在使用代码中的truncate函数将$latest的值削减到50个字符

要获得$latest的完整值,请使用以下代码:

$announcements = $dbc->query($q)->results(); //Returns array of objects
$announcements = prepareMessage($announcements); //Adds html tags to values
$latest = $announcements[0]; //Assign first index to variable


function prepareMessage($message) {
    foreach($message as $values => $key) {
        $key->title = '<h2>'.$key->title.'</h2>';
        $key->name = '<p>'.$key->name.'</p>';
        $key->date = '<small>'.humanDate($key->date).'</small>';
    }

    return $message;
}
$announcements=$dbc->query($q)->results()//返回对象数组
$announcements=prepareMessage($announcements)//将html标记添加到值
$latest=$announcements[0]//将第一个索引分配给变量
函数prepareMessage($message){
foreach($value=>$key的消息){
$key->title=''.$key->title'';
$key->name='。$key->name'

'; $key->date=''.humanDate($key->date)。''; } 返回$message; }
或者您可以更改此行显示的字符数(其中“50”是要显示的字符数,“0”是从何处开始)

$key->announcement=substr($key->announcement,0,50)。”

",;
本例可能有助于您理解$latest发生变化的原因:

正如代码中所述,$announcements是一个对象数组,简化如下:

$test = array(new StdClass(array('a'=>1)));
$latest = $test[0];
$test[0]->a = 3;
var_dump($latest);

var_转储将显示$latest(最新更改)。这是因为$test[0]实际上只是对StdClass实例的引用,而该实例被复制到$latest。当实例发生更改时,对实例的两个引用将显示来自同一实例的相同值。

也许此示例将帮助您理解$latest发生更改的原因:

正如代码中所述,$announcements是一个对象数组,简化如下:

$test = array(new StdClass(array('a'=>1)));
$latest = $test[0];
$test[0]->a = 3;
var_dump($latest);

var_转储将显示$latest(最新更改)。这是因为$test[0]实际上只是对StdClass实例的引用,而该实例被复制到$latest。当实例更改时,对实例的两个引用将显示来自同一实例的相同值。

因为
$latest
是对
$announcements[0]
的引用,而不是
$announcements[0]
的实际值。相反,请使用
克隆
。在PHP5中


因为
$latest
是对
$announcements[0]
的引用,而不是
$announcements[0]
的实际值。相反,请使用
克隆
。在PHP5中


他正在将truncate()应用于$announces。。。现在,除非$latest作为参考,否则这不会回答他的问题。:)我认为您的答案并不能真正解释为什么更改$announcement[0]的值也会更改$latest.M的值。亚当·肯德尔的回答准确地解释了为什么以及如何。。。op没有提到使用的是哪个php版本。但它没有解释问题中所述的值被截断(更改)的原因?他正在将truncate()应用于$announces。。。现在,除非$latest作为参考,否则这不会回答他的问题。:)我认为您的答案并不能真正解释为什么更改$announcement[0]的值也会更改$latest.M的值。亚当·肯德尔的回答准确地解释了为什么以及如何。。。op没有提到使用的是哪个php版本。但它没有解释问题中所述的值被截断(更改)的原因?这段代码中似乎没有任何内容会影响$latest。。。可能是代码中的某些内容将$latest输出到屏幕上?此代码中的任何内容似乎都没有弄乱$latest。。。也许代码中有什么东西将$latest输出到屏幕上?谢谢。我不知道这只是一个参考。我会记下来以备将来参考。谢谢。我不知道这只是一个参考。我将注意到这一点,以供今后参考。