У меня есть следующая функция:
class TariffFareController { public static function checkRunin($fieldPickup) { $runInThreshold = 5; $fieldDestination = 6; if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { $distance = $fieldPickup - $runInThreshold; } else { $distance = $fieldDestination - $runInThreshold; } } }
Я хочу передать $distance
этой функции: –
private static function getFare($int_terminate) { //CODE //eg// if($distance > 5) { //do something } }
Как я могу это сделать?
Когда вы говорите, что это не работает … это в основном потому, что $diffrent
не был объявлен должным образом, поэтому у вас возникают проблемы с scope
Мое Успение
checkRunin
и getFare
– это метод одного класса TariffFareController
$int_terminate
отличается от $distance
Из вашего класса
$distance
не объявленное как static
getFare
пытается получить доступ к $distance
, которое не было объявлено Простое решение
class TariffFareController { private static $distance = 0; public static function checkRunin($fieldPickup) { $runInThreshold = 5; $fieldDestination = 6; if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { self::$distance = $fieldPickup - $runInThreshold; } else { self::$distance = $fieldDestination - $runInThreshold; } } printf("self:\$distance = %d ; // Called %s :\n", self::$distance, __METHOD__); } public static function getFare($int_terminate) { printf("self:\$distance = %d ; // Called %s :\n", self::$distance, __METHOD__); } } TariffFareController::checkRunin(10); TariffFareController::getFare(2);
Вывод
self:$distance = 5 ; // Called TariffFareController::checkRunin : self:$distance = 5 ; // Called TariffFareController::getFare :
return
значение из первой функции:
public static function checkRunin($fieldPickup) { $runInThreshold = 5; $fieldDestination = 6; if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { $distance = $fieldPickup - $runInThreshold; } else { $distance = $fieldDestination - $runInThreshold; } } return $distance; } // Get $distance from checkRunin() $distance = $obj->checkRunin($fieldPickup); // Pass $distance as a parameter $obj->getFare($distance);
class TariffFareController { public static $distance = 0; public static function checkRunin($fieldPickup) { $runInThreshold = 5; $fieldDestination = 6; if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { self::$distance = $fieldPickup - $runInThreshold; } else { self::$distance = $fieldDestination - $runInThreshold; } } }
тогда
private static function getFare($int_terminate) { //CODE //eg// if(self::$distance > 5) { //do something } }
public static function checkRunin($fieldPickup) {
$runInThreshold = 5;
$fieldDestination = 6;
if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { $distance = $fieldPickup - $runInThreshold; } else { $distance = $fieldDestination - $runInThreshold; } } return $distance;
}
// Get $distance from checkRunin()
$distance = $obj::checkRunin($fieldPickup);
// Pass $distance as a parameter
$obj::getFare($distance);
это ответ от @John Conde
просто не забудьте использовать статическую область использования ::
Я не знаю, почему ответ выше не работал для вас. Но попробуйте эту идею
class someThing {protected $ distance; защищенная функция initDistance () {$ this-> distance = 5; } protected function useDistance () {if ($ this-> distance <5) {// сделать что-нибудь}} $ obj = new someThing (); $ Obj-> initDistance (); $ Obj-> useDistance ();
Невозможно ли использовать сеансы следующим образом:
session_start(); public static function checkRunin($fieldPickup) { $runInThreshold = 5; $fieldDestination = 6; $_SESSION['runin_distance'] = 0; if ($fieldPickup > $runInThreshold && $fieldDestination > $runInThreshold) { if ($fieldPickup > $fieldDestination) { $_SESSION['runin_distance'] = $fieldPickup - $runInThreshold; } else { $_SESSION['runin_distance'] = $fieldDestination - $runInThreshold; } } }
а потом…
private static function getFare($int_terminate) { if($_SESSION['runin_distance'] > 5) { //do something } }
создать расстояние как глобальную переменную, установить его, когда в checkRunIn, затем получить доступ к нему, когда вам это нужно в getFare