Я хочу получить доступ к свойствам статического метода для другого статического метода. Я пытаюсь получить к нему доступ через:
public static function getGender($user) {
$user_data[] = Common::getSomeUsers(true);
$ssn_to_gender[] = array();
foreach($user_data as $u_data){
foreach($u_data as $key => $user){
'$key:' .$user['ssn'];
$ssn = $user['ssn'] . "<br/>";
//echo $ssn;
$ssn_gender= substr($ssn,7,-6) . "<br/>" ;
$dob_gender= substr($ssn,0,6) . "<br/>" ;
echo $dob_gender;
if ($ssn_gender % 2 == 0 )
{
echo 'F' . '</br>';
$ssn_to_gender[$user['ssn']] = 'F';
}
elseif ($ssn_gender % 2 == 1)
{
echo 'M' .'<br/>';
$ssn_to_gender[$user['ssn']] = 'M';
}
}
}
return $ssn_to_gender;
return $dob_gender;
//$user= array();
//echo Common::getSomeUsers($user);
}
public static function getAge( $user ) {
self::getGender(true);
Common::$dob_gender;
}
Common::getAge($userid='');
echo Common::$dob_gender;
Я пытаюсь получить доступ к переменной $dob_gender в методе get_Age() из метода getGender().
Но получить $dob_gender не удалось. Пожалуйста, помогите мне. Я новичок в PHP и объектно-ориентированном программировании.
Спасибо.
В конце вы должны вернуть массив: return $ssn_to_gender; return $dob_gender;, значит return ['ssn'=>$ssn_to_gender,'dob'=> $dob_gender]; или аналогичный. Как только вы вернете первое значение, эта часть скрипта будет выполнена. Он не вернет второе значение, потому что он уже вернул первое.
Я не вижу в коде объявления $dob_gender.
Как уже отмечалось, вам нужно объявить переменную как статическую, а затем назначить ее с помощью self, чтобы self::$dob_gender
Я думаю, вам стоит попробовать сделать эти простые старые функции, пока вы не научитесь лучше разбираться в PHP. Кажется, нет ни рифмы, ни причины, почему вы делаете эти методы и переменные статическими.
@JonStirling да, это внутри класса.
@Rasclatt, я попробую это и обновлю .. спасибо
@AniketSahrawat, да, внутри класса было объявлено так: static public $ dob_gender; статический публичный $ ssn_to_gender;
@Rasclatt благодарит меня, это сработало для меня :) мне помогли массивы.
Я бы посмотрел на то, чтобы не делать его статичным, как я описал в своем ответе. Вы хотите максимально ограничить статические методы.
@Rasclatt, да, я сделаю это. Но есть некое требование.






Я бы подумал о применении стандартного метода вместо серии статических методов:
class Common
{
private $ssn_to_gender,
$dob_gender;
/**
* @returns Itself (Common object)
*/
public function getGender($user)
{
$user_data[] = $this->getSomeUsers(true);
$this->ssn_to_gender[] = array();
foreach($user_data as $u_data){
foreach($u_data as $key => $user){
$ssn = $user['ssn'];
$ssn_gender = substr($ssn,7,-6);
$this->dob_gender = substr($ssn,0,6);
if ($ssn_gender % 2 == 0 ) {
$this->ssn_to_gender[$user['ssn']] = 'F';
}
elseif ($ssn_gender % 2 == 1) {
$this->ssn_to_gender[$user['ssn']] = 'M';
}
}
}
return $this;
}
/**
* @returns The corresponding private variable
*/
public function getSSNToGender()
{
return $this->ssn_to_gender;
}
/**
* @returns The corresponding private variable
*/
public function getDOBGender()
{
return $this->dob_gender;
}
/**
* @question I am not sure the purpose of this method. Presumably you need to
* do more in the way of script otherwise you would just do the
* getGender() method instead
*/
public function getAge($userid)
{
# I am returning this but presumably you want to do something else??
return $this->getGender($userid);
}
}
Использовать было бы так:
$Common = new Common();
$Age = $Common->getAge($userid);
print_r($Age->getDOBGender());
print_r($Age->getSSNToGender());
Действительно ли эти статические функции внутри класса?