PHP sınıf düzeyinde küresel şey bildirmek miyim?

3 Cevap php

Bir sınıf olarak küresel şey ayarlamak ve ona erişmek için o sınıfın tüm yöntemleri için bir yolu var mı? Ben kullanmak Şu anda eğer global $session; Ben tüm yöntemler aynı sınıfta bile onu kullanan her yönteme içine eklemek zorunda.

Ben sınıfa doğrudan eklemek için çalışırsanız o zaman ben bir işlev bekliyor söyleyerek bir php hatası alıyorum

global $session;

Burada daha iyi bir örnek ...

class test{
    function test1(){
    	$self->test2($var);
    }

    function test2($var){
    	return $var
    }
}

in this case I am getting this error below, do I need to use global or what? Fatal error: Call to a member function test2() on a non-object

3 Cevap

Eğer self yerine this kullanıyorsanız çünkü bir hata alıyoruz.

yani

$this->test2($var);

Ben soruyu yanlış anlama olabilir, ama ne istediğinizi bir örnek değişkeni olduğunu düşünüyorum:

<?php
    class Foo {
        var $bar = "blue"

        function output() {
            echo $this->bar . "\n";
        }

        function a() {
            $this->bar = "green";
        }
        function b() {
            $this->bar = "red";
        }
    }
 ?>

Bu durumda, $bar Her yöntemin erişilebilen, örnek değişkendir. Foo sınıfını kullanarak aşağıdaki kod:

$newFoo = new Foo();
$newFoo->output();
$newFoo->a();
$newFoo->output();
$newFoo->b();
$newFoo->output();

Aşağıdaki çıktıyı yaratacak:

blue
green
red

Bunu yapmak için farklı yolları vardır,

<?php
class test{
    private $p_var;
    public static $s_var;

    function  test(){
        $this->p_var="RED";
        self::$s_var="S_RED";
    }

    function test1(){
        return $this->test2($this->p_var);
    }
    function test2($var){ 
        return $var;
    }
    function test3($var){ 
        $this->p_var=$var;
    }

    function stest1(){
        return $this->test2(self::$s_var);
    }
    function stest2($var){ 
        return $var;
    }
    function stest3($var){ 
        self::$s_var=$var;
    }

} 
?>

Heere $ objtest testi () sınıfı amacıdır:

$objtest=new test();

echo  $objtest->test1(),"<br/>"; 
$objtest->test3("GREEN"); 
echo $objtest->test1(),"<br/>";
echo "<br/>";

echo  $objtest->stest1(),"<br/>"; 
$objtest->stest3("S_GREEN"); 
echo $objtest->stest1(),"<br/>";

test::$s_var="S_BLUE";
echo $objtest->stest1();

Aşağıdaki çıktıyı yaratacak

RED
GREEN

S_RED
S_GREEN
S_BLUE

Using static variable(test::$s_var) you can achieve what you want. If you have any confusion about self and $this then you can read this document