Başka bir işlevin bir değer elde etmek için nasıl

4 Cevap php

I am new to PHP and I am trying to create a web mashup with amazon and ebay. My problem is that I have a function called "printCategoryItems()" which sets a variable called $keyword. I want to use this variable elsewhere in the code but I can't get it to work. For Example,


<?php
function printCategoryItems(){
    if(isset($_GET['keyword'])){
        $keyword = $_GET['keyword'];
        ...
    }
}
...

$query = $keyword;

...

This is the sort of thing I am trying to do but I end up getting an Undefined variable error for keyword. Is there a way for me to do what I'm trying to do?

Şimdiden yardımlarınız için teşekkürler.

(Sadece Java Programlama Deneyimi var)

4 Cevap

Sen işlevin dışında $keywords ifade işlevin içinde global keyword in the function, so $keywords kullanabilirsiniz:

function printCategoryItems() {
    global $keyword;
    if(isset($_GET['keyword'])){
        $keyword = $_GET['keyword'];
    }
}

printCategoryItems();
var_dump($keyword);

Bir işlev içinde değişkenleri fonksiyonun yerel kapsamı ait değil, küresel kapsam (I haven't done any JAVA for a long time, but I think it's the same in JAVA : a variable declared inside a function is not visible from outside of that function) çünkü bu.


But using global variables is generally not a great idea... a better solution would be to have your function return the data ; for instance :

function printCategoryItems() {
    if(isset($_GET['keyword'])){
        return $_GET['keyword'];
    }
}

$keyword = printCategoryItems();
var_dump($keyword);


As a semi-side-note : another solution, still with global variables (not a good idea, again) would be to use the $GLOBALS superglobal array :

function printCategoryItems() {
    if(isset($_GET['keyword'])){
        $GLOBALS['keywords'] = $_GET['keyword'];
    }
}

printCategoryItems();
var_dump($GLOBALS['keywords']);

İşte, artık global anahtar kelime gerek.


And, to finish, you should read the PHP documentation -- especially the part about Functions.

Işlevi değişkeni dön

return $keyword;

Eğer işlevini çağırdığınızda ve atayın

$query = printCategoryItems();

Buna ek olarak, beyan olabilir $query olarak boş bir dize ve referans ile işlevi örneğin geçmek printCategoryItems(&$query). Ya da bir sınıfa kodunuzu sarın ve $query bir örnek değişkeni yapmak, böylece $this->query = $keyword ile ayarlayabilirsiniz olabilir.

Ancak, adında bir işlevi printCategoryItems(), ben bir şey ayarlamak için beklemek olmaz, ama ekranda bir şeyler yazdırmak için. Sen fonksiyonunun sorumluluğunu düşünebilirsiniz.

Tamamen global için muhalefet katılıyorum. Önleyebilirsiniz Whereever global, sadece bunu önlemek. Düşünüyorum, ama kaçının. Ve PHP, seni global kaçamadı herhangi bir senaryo, düşünemiyorum.

Eğer başka bir yerde tanımlanmış bir değişken erişmek istiyorum ama bunu erişmek istiyorsanız inside and outside of the function, global anahtar kelime ile koyun:

function printCategoryItems(){
    if(isset($_GET['keyword'])){

        global $keyword = $_GET['keyword'];
        ...
    }
}