Статический метод PHP-OOP

Я хочу получить доступ к свойствам статического метода для другого статического метода. Я пытаюсь получить к нему доступ через:

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 и объектно-ориентированном программировании.

Спасибо.

Действительно ли эти статические функции внутри класса?

Jonnix 09.03.2018 15:47

В конце вы должны вернуть массив: return $ssn_to_gender; return $dob_gender;, значит return ['ssn'=>$ssn_to_gender,'dob'=> $dob_gender]; или аналогичный. Как только вы вернете первое значение, эта часть скрипта будет выполнена. Он не вернет второе значение, потому что он уже вернул первое.

Rasclatt 09.03.2018 15:47

Я не вижу в коде объявления $dob_gender.

Aniket Sahrawat 09.03.2018 15:50

Как уже отмечалось, вам нужно объявить переменную как статическую, а затем назначить ее с помощью self, чтобы self::$dob_gender

Rasclatt 09.03.2018 15:51

Я думаю, вам стоит попробовать сделать эти простые старые функции, пока вы не научитесь лучше разбираться в PHP. Кажется, нет ни рифмы, ни причины, почему вы делаете эти методы и переменные статическими.

Rasclatt 09.03.2018 15:58

@JonStirling да, это внутри класса.

Jai Kumar 10.03.2018 20:52

@Rasclatt, я попробую это и обновлю .. спасибо

Jai Kumar 10.03.2018 20:53

@AniketSahrawat, да, внутри класса было объявлено так: static public $ dob_gender; статический публичный $ ssn_to_gender;

Jai Kumar 10.03.2018 20:56

@Rasclatt благодарит меня, это сработало для меня :) мне помогли массивы.

Jai Kumar 11.03.2018 18:18

Я бы посмотрел на то, чтобы не делать его статичным, как я описал в своем ответе. Вы хотите максимально ограничить статические методы.

Rasclatt 11.03.2018 18:20

@Rasclatt, да, я сделаю это. Но есть некое требование.

Jai Kumar 11.03.2018 18:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
11
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы подумал о применении стандартного метода вместо серии статических методов:

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());

Другие вопросы по теме