在php中,通过函数构建字符串的最佳方法是什么?

在php中,通过函数构建字符串的最佳方法是什么?,php,html,function,functional-programming,Php,Html,Function,Functional Programming,所以也许我只是大脑有点小毛病,艾德克。但这似乎应该行得通,但实际上不行 意图 在整个页面中构建一个字符串,以便稍后在应用程序页面中使用 问题 在使用字符串的结果值之前,如何使用函数多次添加到字符串中来存储字符串?使用函数比使用变量更好吗 一个不起作用的例子 一如既往,感谢大家为使网络世界成为一个更加高效的地方所做的贡献 编辑 这样做的一个示例目的是允许Javascript聚合到一个变量中,以便可以在其影响的元素附近创建该变量,然后将其放置在 当您在之后添加更多内容时,使用字符串将很困难。相反,请

所以也许我只是大脑有点小毛病,艾德克。但这似乎应该行得通,但实际上不行

意图 在整个页面中构建一个字符串,以便稍后在应用程序页面中使用

问题 在使用字符串的结果值之前,如何使用函数多次添加到字符串中来存储字符串?使用函数比使用变量更好吗

一个不起作用的例子 一如既往,感谢大家为使网络世界成为一个更加高效的地方所做的贡献

编辑 这样做的一个示例目的是允许Javascript聚合到一个变量中,以便可以在其影响的元素附近创建该变量,然后将其放置在


当您在之后添加更多内容时,使用字符串将很困难。相反,请使用数组或对象

您可以在页面顶部定义数组或对象,如下所示:

$testNG = array();
然后,您可以在任意位置向数组添加值:

$testNG[] = $tng; or
$testNG['key'] = $tng;
class YourValue
{
    private $value = '';

    public function setValue($newValue)
    {
        $this->value .= $newValue;
    }

    public function getValue()
    {
        return $this->value;
    }
}


$yourValue = new YourValue;
$yourValue->setValue('value1');
//More code
$yourValue->setValue(' - value2');
//More code
echo $yourValue->getValue();
否则,如果要继续使用字符串,请将变量作为全局变量添加到函数中:

function testNG($tng){
   global $testNG;

   $testNG .= $tng;
   return $testNG;
}

一种方法是在函数中将$testNG声明为静态,而不是使用全局变量。从:

静态变量仅存在于局部函数作用域中,但当程序执行离开此作用域时,它不会丢失其值

因此,每次调用该函数时,它都会将输入添加到已有的内容中

<?php

function testNG($tng = '') {
    static $testNG = '';
    return $testNG .= $tng;
}

testNG("hello!!");
testNG(" world!!");
testNG(" etc.");
?>
<h2><?= testNG(); ?></h2>

另一种方法,稍加介绍OOP,可能类似于:

<?php

 class overSimplifiedJSViewHelper 
 {

     protected $_strOut;

     public function append($strIn)
     {
         $this->_strOut = $this->strOut . $strIn;
     }

     public function clear()
     {
         $this->_strOut = '';
     }

     public function getStrOut()
     {
         return $this->_strOut;
     }
 }


 $jsOut = new overSimplifiedJSViewHelper;

 $jsOut->append("$('#rating').rating();");
 $jsOut->append("alert('foo)");

 echo $jsOut->getStrOut();
我觉得你问题的关键是关于

OP可能还想看看PHP的

另外,当你开始学习更多关于范围和如何保持健全性的知识时,也许可以看看设计模式,比如注册表模式,而不是把所有东西都放在全局空间中。。。我们记得全球注册。。。
检查其他人的代码,特别是PHP框架,是学习的好方法

您有许多答案,可以完美地解决您的确切需求。然而,从另一个角度来看:

您需要一个函数,为此可以添加另一个参数、通过引用传递、使用全局变量或使用静态变量。这是众所周知的,全球变暖是不好的。但其他方法真的有必要吗?我不会再添加另一个param或pass by reference,因为它们与我认为在使用static时存在的过度使用是一样的,所以我将使用它作为所有函数方法的示例:

function appendValueToVar($newValue = '')
{
    static $theValue = '';

    return $theValue .= $newValue;
}

appendValueToVar('value1');
// More code
appendValueToVar(' - value2');
// More code

echo appendValueToVar();
这种方法的问题在于,你有一个函数,乍一看它的功能并不明显。此外,还可以调用相同的函数将值附加到静态变量并检索它。这就像是在一个有一个getter和setter,这是一个有点气味,并违反SRP和其他原则

您可以看到,我将其命名为appendValueToVar,但我是否应该将其命名为getValueFromVar?还有别的吗?它真的不知道自己想要什么

撇开原则等不谈,主要的一点是,这如何节省时间或精力,而不仅仅是简单地附加到变量上,这很简单,目的也很明显

$theValue = '';
// More code
$theValue .= 'value1';
// More code
$theValue .= 'value2';
// More code
echo $theValue;
对我来说,使用函数来实现这一点是过分的,会给视觉和意图带来很大的复杂性和潜在的混乱,更需要维护,等等

如果你想让你的代码更好,那很好,但我的意见是。。卷积函数的增益很小,但复杂度很高,这并不是最好的解决方法。这并不是什么真正的进步

编写一个非常简单的类,用于获取和设置对象的数据。想要什么并不难:

$testNG[] = $tng; or
$testNG['key'] = $tng;
class YourValue
{
    private $value = '';

    public function setValue($newValue)
    {
        $this->value .= $newValue;
    }

    public function getValue()
    {
        return $this->value;
    }
}


$yourValue = new YourValue;
$yourValue->setValue('value1');
//More code
$yourValue->setValue(' - value2');
//More code
echo $yourValue->getValue();
然而,尽管它优雅、干净、易于管理且可重复使用,但它也完全超出了您的需求。除非你的价值是一个重要的递增金额,比如某人的购物车总额或其他什么


希望能有所帮助:

听起来像是需要对象或数组,而不是添加到字符串中。添加到一个字符串会使代码变得困难,因为一旦你想做一些特定的事情,你就必须把你的代码放在中间,或者在任何地方都需要把你的结果放在字符串中。这是一种非常糟糕的气味如果你解释你的真实原因和代码,而不是一个没有意义的虚假原因和代码,也许我们可以建议一个更好的方式,或者至少是你想要的方式。实际上,您已经创建了一个函数,它可以做您想要的事情:您可能认为它可以做我想要的事情,但是在测试文件中,变量没有被附加到。它只保留函数之前的初始值。这就是为什么我觉得我有一个头脑放屁。更新了一个例子usageAh我现在看到你说,$testNG不是在函数的范围内定义的,只是在函数的范围之外。您可以在函数中设置一个全局变量not nice、通过引用传递、传入另一个参数(即您要附加的变量和要附加的值),或者只是将值附加到变量
没有功能。我认为这个功能太过分了。例如$theVar=$theVar.=“我的新值”$theVar.=“另一件事”;谢谢,这正是我个人所需要的。然而,如果社区投票的另一个答案更高,我会选择一个更受欢迎的答案。不过,这绝对是我想要的!请注意,无法将其重置为初始空字符串。在程序中,您不能多次执行此操作。也许当它在没有参数的情况下被调用时,你可以在返回它的值的同时清除变量。我删除了我的注释,你是对的:尽管在我看来,这仍然不是一个很好的方法。我必须在这个函数上有一个好运气才能看到它在做什么,并且它仍然按照每次调用函数的顺序向单个变量添加数据。在我看来,还有更清晰、更优雅的方法可以做到这一点:@James我尊重你的意见。老实说,我不会觉得这样的函数特别有用。由于其线性度,它相当有限,尽管可能会如Barmar所建议的那样进行一些改进。我真的只是想指出另一种可能可行的方法来避免使用全球网络。是的,不用担心,只是讨论一下而已。我投了赞成票。它确实很好地解决了这个问题:我非常感谢这些提示。我肯定会用你的例子来解释。一个类最有意义,因为它可以多次用于不同的目的。$strOut可能应该是$\u strOut,但是建议不要使用这种前缀。谢谢。更正。