PHP ile bir statik yönteme parametreleri geçirerek

1 Cevap php

Ben kendi çerçevesi inşa ediyorum ve ben bir statik yönteme bir parametre geçmek için çalışıyorum. Nedense, parametre geçirilen almıyor. İşte kod:

Front.php:

if(URI::get(0) === "")

URI.php:

public static function get($index)
    {
        die($index);
        if(!filter_var($index, FILTER_VALIDATE_INT)) {
            throw new Exception('You must supply an integer index for the URI segment');
        }

        return self::$uri[$index];
    }

İlk başta ben bir istisna başlamıştı, bu yüzden emin $ endeks aslında doğru geçti başlamıştı yapmak için kalıp açıklamada ekledi. Script çıktığında, hiçbir şey indeksi için dışarı basılmış olur, çünkü görünüşe göre öyle değil.

Ben php 5.3.1 kullanıyorum.

1 Cevap

Çalışması gerektiği gibi, bu, oldukça garip; Bu kod kısmını test ettikten sonra:

class ClassA {
    public static function a($param) {
        var_dump($param);
    }
}

ClassA::a(123);

Ben bu çıktıyı alıyorum:

int 123

Statik yöntem gerçekten parametre almak yoktu (ve aslında, neden olmasın hiçbir sebep göremiyorum) gösterir.


As a sidenote, you are ending with this portion of code :

die(0);

exit (which is the same as die) * (vurgu benim) için kılavuz sayfasını alıntı *:

void exit  ([ string $status  ] )
void exit ( int $status )

If status is a string, this function prints the status just before exiting.
If status is an integer, that value will also be used as the exit status.
[...]
Note: PHP >= 4.2.0 does NOT print the status if it is an integer.

Sen 4.2 daha yeni bir sürümü PHP 5.3 kullanıyorsanız; ve senin durumunda, $status tamsayı - bu yayınlanmıştır kodu ile görüntülenen bir şey yok gayet normal olduğu anlamına gelir.


And, to finish : if you remove the die, your code ends up doing this :

if(!filter_var($index, FILTER_VALIDATE_INT)) {
    throw new Exception('...');
}

$index = 0 ile

filter_var returns the filtered value ; using FILTER_VALIDATE_INT, ben bir tamsayı almak için filtreleme varsayalım - ve 0 tam sayıdır.

filter_var 0 dönecektir için çağrı anlamına gelir.

0 false (see Converting to boolean) -- so, you will enter into the if blok olarak kabul edilir; ve istisna atılır.


Considering filter_var returns :

  • Filtrelenen veriler,
  • veya false filtre başarısız olduğunda,
  • Ve bu 0, iade edilebilir geçerli bir veri

Muhtemelen === operatörü (see Comparison Operators) , to compare the returned value to false kullanmalıdır. Hangi böyle olmazdı bazı kod anlamına gelir:

if(filter_var($index, FILTER_VALIDATE_INT) === false) {
    throw new Exception('...');
}


Hope this helps !