Подтвердить что ты не робот

Могу ли я передавать переменные между различными функциями в PHP?

Я попытаюсь объяснить с помощью примера...

Скажем, у меня есть две разные функции, и одна из них имеет определенную переменную. Во второй функции я не хочу снова писать одну и ту же переменную, могу ли я просто использовать переменную из первой функции во второй, БЕЗ переопределяя ее во второй функции?

Что-то вроде:

function a()
{
  $var = "my variable";
}

function b()
{
 echo $var;
}

Извините, если эти вопросы немного глупы, но я все еще новичок =).

4b9b3361

Ответ 1

Конечно, вы можете делать глобальные переменные, но PHP 5.3.0+ имеет анонимные функции, поэтому вы также можете делать замыкания:

<?php

function a(){
  $a = 1;  
  echo "First: $a, ";
  ++$a;

    // This is a closure. It can gain access to the variables of a() with the 
    // use option.
  $b = function() use ($a) {
      echo "second: $a";  
  };  
  $b();
};
a(); // Outputs: First: 1, second: 2
?>

Попробуйте этот пример Codepad


или, вероятно, более полезно:

<?php

function a(){
  $a = 1;  
  echo "First: $a, ";
  ++$a;
  $b = function() use ($a) {
      echo "second: $a";  
  };        
  return $b;
};
$fun = a();     // $fun is now $b & $b has access to $a!
$fun();
// Outputs: First: 1, second: 2
?>

Попробуйте этот пример Codepad

Из документов:

Закрытие также может наследовать переменные из родительской области. Любые такие переменные должны быть объявлены в заголовке функции. Наследование переменных из родительской области не совпадает с использованием глобальных переменных. Глобальные переменные существуют в глобальной области, что то же самое независимо от того, какая функция выполняется. Родительская область замыкания - это функция, в которой было объявлено закрытие (не обязательно функция, из которой она была вызвана).

Ответ 2

Самое чистое решение здесь - сделать методы A и B класса и иметь общие переменные как частные статические переменные. Это устраняет беспорядок глобальных переменных и позволяет обеим функциям быть глобально доступными.

class SomeClass
{
    private static $a = 1;

    public static function a() {
        self::$a = 2;
    }

    public static function b() {
        echo self::$a;
    }
}

Затем вы можете вызвать функции:

SomeClass::a();
SomeClass::b();

Ответ 3

$a = 1;
function a(){
  global $a;
  $a = 2;
  }
function b(){
  global $a;
  echo $a;
  }

a();
b();

выход:

2

Ответ 4

Я бы сделал это так. Это более распространенная реализация. Помните, что функции могут передаваться параметрам и могут возвращать значения.

// Main
$a = a();
b($a);

function a()
{
  return "my variable";
}

function b($a)
{
 echo $a;
}

У вас есть основная часть программы, а переменная $a остается в области видимости. Глобалы редко используются и технически никогда не нужны.

Ответ 5

Нравится это. вы можете использовать

function a()
{
  global $var; 
  $var = "my variable";
}

function b()
{
 global $var; 
 echo $var;
}

Ответ 6

<?php

class A
{
    private $p;
    private $q;
    private $ans;
    public  function hello()
    {
        echo "Hello PratikPatel";
    }
    public function getdata($a,$b)
    {

        $this->p=$a;
        $this->q=$b;
        $ans=$this ->p/$this->q;
        $this->ans=$ans;

    }
    public function div1()
    {
        echo "your division answer is:=".$this->ans."<br/>";
    }
}
class B extends A
{
    function hello()
    {
        echo "Hello "."<br/>";
    }

}

$p=new B();
$p1=new B();
$p2=new B();
$p -> getdata(20,10);
echo $p1 -> hello();
$p2 -> div1();

? >

этот код в проблеме, который не может напечатать результат разделения