【问题标题】:PHP: Functions not working [duplicate]PHP:函数不起作用[重复]
【发布时间】:2013-08-29 15:30:56
【问题描述】:

大家下午好!我一直在尝试调用一个函数,但它似乎不起作用。

所以,这是我得到的代码:

<? 
if (!isset($_SESSION)) session_start();
$acess_level = 4;
if (!isset($_SESSION['UserID']) OR ($_SESSION['UserAL'] < $acess_level)) {
    session_destroy();
    header("Location: login"); exit;
}


$tlang = $_SESSION['lang'];
$level = $_SESSION['UserAL'];
include($_SERVER["DOCUMENT_ROOT"] . "/inside/functions.php");
$check = "adv";

function doLang()
{
  if ($tlang == 'en') {echo "Advanced Tutorials";} 
  if ($tlang == 'br') {echo "Tutoriais Avançados";} 
  if ($tlang == 'es') {echo "Tutoriales Avanzados";} 
  if ($tlang == 'fr') {echo "Tutos avancés";} 
  if ($tlang == 'id') {echo "Pelatihan dengan cara proffesional";} 
  if ($tlang == 'fi') {echo "Edistyneempiä oppaita";} 
  if ($tlang == 'tr') {echo "Gelişmiş Kılavuzlar";}
}

doLang();
echo "test".doLang()."test"; ?>

“会话”部分工作正常,所以我想那里根本没有错字/问题。所以,基本上,doLang() 函数检查用户使用的语言,然后回显“正确”的语言,如您所见。如果我使用这样的东西:

<?
  if ($tlang == 'en') {echo "Advanced Tutorials";} 
  if ($tlang == 'br') {echo "Tutoriais Avançados";} 
  if ($tlang == 'es') {echo "Tutoriales Avanzados";} 
  if ($tlang == 'fr') {echo "Tutos avancés";} 
  if ($tlang == 'id') {echo "Pelatihan dengan cara proffesional";} 
  if ($tlang == 'fi') {echo "Edistyneempiä oppaita";} 
  if ($tlang == 'tr') {echo "Gelişmiş Kılavuzlar";}
?>

它就像一个魅力,但如果我使用一个函数来代替它就不起作用。我错过了什么,我做错了什么吗?感谢您的关注!

【问题讨论】:

  • 您需要将 $tLang 作为参数传递给函数 - 了解variable scope
  • 另外,考虑使用 switch() 语句。
  • return 值而不是回显它。
  • @ChristianGärtner 抱歉,您能教我如何退货吗? @Robbert 的返回函数不起作用:\
  • @MisaelVergara,我修复了这个功能。我省略了一些引号。

标签: php html function


【解决方案1】:

$tLang 不在函数范围内。您需要将变量传递给函数

function doLang($tLang) {
   ...
}

或使用全局语句

function doLang() {
   global $tLang

   ....
}

第一种方法是首选方法。

您确实应该考虑更改使用此功能的方式。为了清理它,我会使用 switch 语句来使流程更好一点,我会返回值而不是回显结果。现在,由于您在 echo 语句 (echo "test".doLang()."test") 期间调用该函数,因此您的函数可以工作,但如果您曾经在变量赋值 ($var = "text".doLang()."text") 中使用它,您的函数将无法工作

function doLang($tLang)
{
   $val = "";
   switch($tLang) {
     case "br":
       $val = "Tutoriais Avançados"
       break;
     case "es":
       $val = "Tutoriales Avanzados";
       break;
     case "fr":
       $val = "Tutos avancés";
       break;
     case "id":
       $val = "Pelatihan dengan cara proffesional";
       break;
     case "fi":
       $val = "Edistyneempiä oppaita";
       break;
     case "tr":
       $val = "Gelişmiş Kılavuzlar";
       break;
     default:
       $val = "Advanced Tutorials";
       break;
   }
   return $val;
}

使用默认语句可确保$val 始终有一个值要返回。

【讨论】:

    【解决方案2】:

    使用这个:

    function doLang($tlang)
    {
      if ($tlang == 'en') { echo "Advanced Tutorials"; } 
      if ($tlang == 'br') { echo "Tutoriais Avançados"; } 
      if ($tlang == 'es') { echo "Tutoriales Avanzados"; } 
      if ($tlang == 'fr') { echo "Tutos avancés"; } 
      if ($tlang == 'id') { echo "Pelatihan dengan cara proffesional"; } 
      if ($tlang == 'fi') { echo "Edistyneempiä oppaita"; } 
      if ($tlang == 'tr') { echo "Gelişmiş Kılavuzlar"; }
    }
    
    doLang($tlang);
    ?>
    

    【讨论】:

    • 请注意,如果您正在回显函数的结果,您可能应该从函数中返回而不是在函数中回显
    • @MarkBaker :是的,我已经从原始帖子中复制了整个内容.. 已删除..
    • 希望 OP 不提供 PHP 高级教程
    • @MarkBaker :.. :)..haha,, no..
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2015-04-16
    • 2017-06-30
    • 2013-03-22
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多