2017-03-17 93 views
1

我有三元运营商像这样的文本块三元运营商:PHP:内部变量和重新评估的变量

$base ="This option". ($enhances == 1? 'enhances' : 'does not enhance') ."your". ($ability==1? 'gaming' : 'coding') ." abilities."; 

应输出文本“这个选项[增强了/不增强]你的[游戏/编码]能力“,取决于设置的变量。

原文很长,根据变量有多个词可以更改。我想保留原文,并通过更改三元运算符中使用的变量值进行修改。这是因为基本文本必然会改变很多次,我想只将它改为一个地方。

那么我想只用变量来改变基本文本创建一个HTML表:

$enhances=1; 
$ability=0; 
echo " 
<tr> 
    <td><div class=\"factors\">Enhances = 1<br> Ability = 0</div></td> 
    <td><div class=\"message\">$base</div></td> 
</tr> 
"; 
$ability=1; 
$enhances=1; 
echo " 
<tr> 
    <td><div class=\"factors\">Enhances = 1 <br> Ability = 1</div></td> 
    <td><div class=\"message\">$base</div></td> 
</tr> 

"; 

该怎么过的输出是这样的:

Enhances = 1 
Ability = 0 
This option does not enhance your coding abilities. 
Enhances = 1 
Ability = 1 
This option does not enhance your coding abilities. 

有没有办法重新 - 设置变量后评估$ base变量?什么是用PHP做这种文本格式的正确方法?我是一个PHP新手,所以我不确定PHP可以做什么,不能做什么。或者即使我的条款是正确的。希望我足够描述。

类似的职位,但有一个变量中只有一个变量:PHP: Evaluating variable in string, and then changing value of variable

回答

2

试试这个:

$enhances=1; 
$ability=0; 
echo ' 
<tr> 
    <td><div class="factors">Enhances = 1<br> Ability = 0</div></td> 
    <td><div class="message">'.getStatement($enhances, $ability).'</div></td> 
</tr>'; 

$ability=1; 
$enhances=1; 

echo ' 
<tr> 
    <td><div class="factors">Enhances = 1 <br> Ability = 1</div></td> 
    <td><div class="message">'.getStatement($enhances, $ability).'</div></td> 
</tr>'; 

function getStatement($enhances, $ability) { 
    return "This option". ($enhances == 1? ' enhances ' : 'does not enhance') ."your". ($ability==1? ' gaming ' : ' coding') ." abilities."; 
} 
1

你可以定义base的功能,即,

function fn($enhances, $ability){ 
    return "This option". ($enhances == 1? 'enhances' : 'does not enhance') ."your". ($ability==1? 'gaming' : 'coding') ." abilities."; 
} 

,然后在回声中使用它作为

echo "something ".fn($enhances, $ability)."something else"; 
0

你可以做的最简单的事情就是把它包装到一个函数中。

function write_message($ability, $enhances) { 
    $message = 'This option ' . ($enhances ? 'enhances' : 'does not enhance') . ' your ' . ($ability ? 'gaming' : 'coding') . ' abilities'; 
    return $message; 
} 

然后如下

$ability=1; 
$enhances=1; 

echo " 
<tr> 
    <td><div class=\"factors\">Enhances = 1 <br> Ability = 1</div></td> 
    <td><div class=\"message\"> " . write_message($ability, $enhances) . "</div></td> 
</tr> 
"; 
0

这似乎有点矫枉过正我要格式化一些不同的字符串,每次创建一个新的功能,使用它。 PHP有能力做到这一点。您可以使用printf实现这个像这样:

<?php 

$enhanceText = [ 
    'enhances', 
    'does not enhance', 
]; 
$abilityText = [ 
    'gaming', 
    'coding', 
]; 

$base = "This option %s your %s abilities<br />"; 

$enhances = 0; 
$ability = 0; 
printf($base, $enhanceText[$enhances], $abilityText[$ability]); 

$enhances = 1; 
$ability = 0; 
printf($base, $enhanceText[$enhances], $abilityText[$ability]); 

$enhances = 0; 
$ability = 1; 
printf($base, $enhanceText[$enhances], $abilityText[$ability]); 

$enhances = 1; 
$ability = 1; 
printf($base, $enhanceText[$enhances], $abilityText[$ability]); 

输出:

This option enhances your gaming abilities 
This option does not enhance your gaming abilities 
This option enhances your coding abilities 
This option does not enhance your coding abilities