Çağrıldığında PHP işlevi yürütmek olmaz

5 Cevap php

Bu işlevi ile ilgili bir sorun yaşıyorum. Bazı şeyler echo gerekiyordu, ama onu çağırdığınızda nedense bunu yapmayacağım.

İşte fonksiyonu bulunuyor:

$count = count($info['level']);
function displayInfo()
{
  for ($i=0; $i<$count; $i++)
  {
    echo "[b]".$info['name'][$i]."[/b]\n\n"
    ."Level: ".$info['level'][$i]
    ."\nPrice: ".$info['price'][$i]
    ."\nSellback: ".$info['sell'][$i]
    ."\nLocation: ".$location
    ."\n\nType: ".$info['type'][$i]
    ."\nElement: ".$info['element'][$i]
    ."\nDamage: ".$info['damage'][$i]
    ."\nBTH: ".$info['bth'][$i]
    ."\n\nSPECIAL"
    ."\nHits: ".$info['hits'][$i]
    ."\nType: ".$info['stype'][$i]
    ."\nElement: ".$info['selement'][$i]
    ."\nDamage: ".$info['sdamage'][$i]
    ."\nBTH: ".$info['sbth'][$i]
    ."\nRate: ".$info['rate'][$i]
    ."\n\nDescription\n".$description
    ."\n".$img
    ."\n\n\n";
  }
}

Ve burada ben işlevini çağırmak için kullanabileceğiniz kod:

<?PHP
    displayInfo();
?>

Ben neyin yanlış olduğunu bulamıyor - bu interuption olmadan bir sözdizim hatası, sayfa yüklenirken değil.

Şimdiden teşekkürler.

5 Cevap

Sen ilan $count ve $info değişken, işlev dışında vardır:

// $info already exists
$count = count($info['level']);  // and $count is initialized here
function displayInfo()
{
for ($i=0; $i<$count; $i++)
...

PHP, bir işlevin dışında bildirilmiş bir değişken işlev içinde görünür değildir.


If you want your "external" variables to be visible from inside the function, you have to declare them as global in the function :

$count = count($info['level']);
function displayInfo()
{
global $count, $info;
// $count is now visible ; same for $info
for ($i=0; $i<$count; $i++)
...


But it's generally considered better to pass the variables as parameters to the function : you have to declare them as a parameter :

function displayInfo($count, $info)
{
for ($i=0; $i<$count; $i++)
...

Onu ararken ve fonksiyon onları geçmek:

$count = count(...);
displayInfo($count, $info);

Ve değiştirmek yerine - global değişkenleri kullanarak parametreleri geçirerek size fonksiyonları erişimi var biliyorum sağlar.


Edit : thanks for the note, X-Istence ! Didn't read enough of the given code :-(

$ Saymak ve $ bilgi fonksiyonu dışında beyan edilir ve bu nedenle onlar içinde görünmez. Sen işlevi $ bilgi geçmek ve sonra bu gibi içinde saymak $ hesaplayabilirsiniz:

//get info from db, or somewhere
$info = array();    

displayInfo($info);

function displayInfo($info)
{
    $count = count($info['level']);
    //now $count and $info are visible.
}

Bkz http://php.net/manual/en/language.variables.scope.php

Ya fonksiyonu içinde senin $ sayısını, taşımak veya işleve geçmek. Ayrıca, $ info dizi yanı sıra işlevi geçirilen veya küresel bir yapılmalıdır. İşte sayımı ve işlevi geçirilen bilgi ile fonksiyon prototipidir.

function displayInfo($count, $info)
{

    for ($i=0; $i<$count; $i++)
    {
    // Do stuff
    }
}

<?php
    $count = count($info['level']);
    displayInfo($count, $info);
?>

Gerçekten de, herhangi bir sözdizimi hataları vardı, ama diğer reaksiyonlarda işaret edildi diğer hatalar vardı. Ben çok yeni kod yazarken tüm hataları göstermek için PHP yapılandırma öneririz. Eğer $ bilgi hakkında bir haber gördüm ve $ saymak olurdu Bu şekilde işlev içinde tanımlanmış olmamak.

Şekillerde bir çift hataları açabilirsiniz.

  1. Bunu yapmak için sunucusunu yapılandırın.
  2. Bir. Htaccess dosyası kullanarak bunları açın
  3. Senaryonuzun çok başında aşağıdaki PHP kodu kullanın.

Örnek:

error_reporting(E_ALL | E_NOTICE); //turn on all errors
ini_set("display_errors","On"); //activate display_error