Могу ли я передавать переменные между различными функциями в PHP?
Я попытаюсь объяснить с помощью примера...
Скажем, у меня есть две разные функции, и одна из них имеет определенную переменную. Во второй функции я не хочу снова писать одну и ту же переменную, могу ли я просто использовать переменную из первой функции во второй, БЕЗ переопределяя ее во второй функции?
Что-то вроде:
function a()
{
$var = "my variable";
}
function b()
{
echo $var;
}
Извините, если эти вопросы немного глупы, но я все еще новичок =).
Ответы
Ответ 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
?>
или, вероятно, более полезно:
<?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
?>
Из документов:
Закрытие также может наследовать переменные из родительской области. Любые такие переменные должны быть объявлены в заголовке функции. Наследование переменных из родительской области не совпадает с использованием глобальных переменных. Глобальные переменные существуют в глобальной области, что то же самое независимо от того, какая функция выполняется. Родительская область замыкания - это функция, в которой было объявлено закрытие (не обязательно функция, из которой она была вызвана).
Ответ 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();
? >
этот код в проблеме, который не может напечатать результат разделения