За последние 24 часа нас посетили 34299 программистов и 1749 роботов. Сейчас ищут 1225 программистов ...

Передача строки в качестве параметра

Тема в разделе "Прочие вопросы по PHP", создана пользователем reqyz, 13 мар 2015.

  1. reqyz

    reqyz Новичок

    С нами с:
    13 мар 2015
    Сообщения:
    14
    Симпатии:
    0
    написал функцию
    Код (Text):
    1.  
    2.     public function _get($string)//socialId
    3.     {
    4.         $result = null;
    5.         if(isset($this->userInfo[$string]))
    6.         {
    7.             $result = $this->userInfo[$string];
    8.         }
    9.         return $result;
    10.     }
    11.  
    12. при передаче параметра в функцию _get('socialId'), параметр приходит пустым. $this->userInfo['socialId'] существует, но функция пытается прочесть $this->userInfo['']
    13. в чем я туплю? подскажите
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    реализация магического метода? ундерскоров не хватает?
     
  3. reqyz

    reqyz Новичок

    С нами с:
    13 мар 2015
    Сообщения:
    14
    Симпатии:
    0
    да. типа того, иначе гетов слишком много у меня. но так почему то пустоту функция принимает, может я строку не правильно передаю?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это как бы намек на то что магические методы с двумя ундерскорами пишутся а в листинге один. я тут к сожалению гадать вынужден так как нет примера использования кода. но чуйка мне подсказывает что ожидается что-то типа $obj->socialId и тогда выполняется магический __get() который не переопределяется методом _get() потому что у них разные имена. с другой стороны упомянуто что вызывается что-то с чем-то но внутри не то но метода отладки я тут тоже не наблюдаю.
     
  5. reqyz

    reqyz Новичок

    С нами с:
    13 мар 2015
    Сообщения:
    14
    Симпатии:
    0
    функция раньше была такой, и всё работало
    Код (Text):
    1.     public function getSocialId()
    2.     {
    3.         $result = null;
    4.         if (isset($this->userInfo['socialId'])) {
    5.             $result = $this->userInfo['socialId'];
    6.         }
    7.         return $result;
    8.     }
    вызывал её так: $auther->getSocialId();
    сейчас функцию вызываю так: $auther->_get('socialId');
    но в качестве аргумента приходит пустота, и я не знаю почему.

    userInfo это json

    по сути если бы даже функция выглядела так:

    Код (Text):
    1.     public function _get($string)//socialId
    2.     {
    3.         $result = null;
    4.         if($string != null)//условие не выполняется
    5.         {
    6.             $result = $string;
    7.         }
    8.         else
    9.         {
    10.             $result = 'что не так со строками?';
    11.         }
    12.         return $result;
    13.     }
    функция выполняется, но при любом аргументе возвращается "что не так со строками?". не проходит проверку не не нуль, если проверку убрать, то просто возвращается пустота
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    var_dump(func_get_args()) в теле метода что дает?
     
  7. reqyz

    reqyz Новичок

    С нами с:
    13 мар 2015
    Сообщения:
    14
    Симпатии:
    0
    возвращает пустоту
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (PHP):
    1. <?php
    2. class ru_php_forum_52291 {
    3.     public function _get($string)//socialId
    4.     {
    5.         $result = null;
    6.         if($string != null)//условие не выполняется
    7.         {
    8.             $result = $string;
    9.         }
    10.         else
    11.         {
    12.             $result = 'что не так со строками?';
    13.         }
    14.         return $result;
    15.     }
    16. }
    17.  
    18. $auther = new ru_php_forum_52291;
    19. var_dump($auther->_get('socialId'));
    Код (Text):
    1. $ php fake.php
    2. string(8) "socialId"
    у меня даже идей нет в какую сторону копать... может быть больше листингов поможет?
     
  9. reqyz

    reqyz Новичок

    С нами с:
    13 мар 2015
    Сообщения:
    14
    Симпатии:
    0
    хорошо, сейчас правда немного переделал, но оба кода готов отправить

    Код (Text):
    1. <?php
    2.  
    3. namespace SocialAuther\Adapter;
    4.  
    5. abstract class AbstractAdapter implements AdapterInterface
    6. {
    7.     protected $clientId = null;
    8.     protected $clientSecret = null;
    9.     protected $redirectUri = null;
    10.     protected $provider = null;
    11.     protected $socialFieldsMap = array();
    12.     protected $userInfo = null;
    13.     protected $caption = null;
    14.     protected $id = null;
    15.  
    16.     public function __construct($config)
    17.     {
    18.         if (!is_array($config))
    19.             throw new Exception\InvalidArgumentException
    20.             (
    21.                 __METHOD__ . ' expects an array with keys: `client_id`, `client_secret`, `redirect_uri`, `Caption`, `provider`, `id`'
    22.             );
    23.  
    24.         foreach (array('client_id', 'client_secret', 'redirect_uri', 'Caption', 'provider', 'id') as $param)
    25.         {
    26.             if (!array_key_exists($param, $config))
    27.             {
    28.                 throw new Exception\InvalidArgumentException
    29.                 (
    30.                     __METHOD__ . ' expects an array with key: `' . $param . '`'
    31.                 );
    32.             }
    33.             else
    34.             {
    35.                 $property = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $param))));
    36.                 $this->$property = $config[$param];
    37.             }
    38.         }
    39.     }
    40.  
    41.     private function SetUserInfo($config)
    42.     {
    43.         $this->userInfo = $config;
    44.     }
    45.     /**
    46.      * Get user social id or null if it is not set
    47.      *
    48.      * @return string|null
    49.      */
    50.    
    51.     function __get($param)//сейчас переделал в такой вид, по примеру из интернета, теперь не знаю что она принимает, но возвращает подозрительную пустоту, раньше была такой public function _get($param);//но оба варианта не работают у меня
    52.     {
    53.         return (isset($this->userInfo[$param])) ? $this->userInfo[$param] : 'not set';
    54.     }
    55.  
    56.     public function getCaption()
    57.     {
    58.         return $this->caption;
    59.     }
    60.  
    61.     /**
    62.      * Get user email or null if it is not set
    63.      *
    64.      * @return string|null
    65.      */
    66.     public function getEmail()
    67.     {
    68.         $result = null;
    69.         if (isset($this->userInfo['email'])) {
    70.             $result = $this->userInfo['email'];
    71.         }
    72.         return $result;
    73.     }
    74.    
    75.     public function getSocialId($param)
    76.     {
    77.         $result = null;
    78.         if (isset($this->userInfo['socialId'])) {
    79.             $result = $this->userInfo['socialId'];
    80.         }
    81.         return $result;
    82.     }
    83.  
    84.     /**
    85.      * Get user name or null if it is not set
    86.      *
    87.      * @return string|null
    88.      */
    89.     public function getName()
    90.     {
    91.         $result = null;
    92.         if (isset($this->userInfo['name'])) {
    93.             $result = $this->userInfo['name'];
    94.         }
    95.         return $result;
    96.     }
    97.  
    98.     /**
    99.      * Get user social page url or null if it is not set
    100.      * @return string|null
    101.      */
    102.     public function getSocialPage()
    103.     {
    104.         $result = null;
    105.         if (isset($this->userInfo['socialPage'])) {
    106.             $result = $this->userInfo['socialPage'];
    107.         }
    108.         return $result;
    109.     }
    110.  
    111.     /**
    112.      * Get url of user's avatar or null if it is not set
    113.      *
    114.      * @return string|null
    115.      */
    116.     public function getAvatar()
    117.     {
    118.         $result = null;
    119.         if (isset($this->userInfo['avatar'])) {
    120.             $result = $this->userInfo['avatar'];
    121.         }
    122.         return $result;
    123.     }
    124.  
    125.     /**
    126.      * Get user sex or null if it is not set
    127.      *
    128.      * @return string|null
    129.      */
    130.     public function getSex()
    131.     {
    132.         $result = null;
    133.         if(isset($this->userInfo['sex']))
    134.         {
    135.             $result = $this->userInfo['sex'];
    136.         }
    137.         return $result;
    138.     }
    139.  
    140.     /**
    141.      * Get user birthday in format dd.mm.YYYY or null if it is not set
    142.      *
    143.      * @return string|null
    144.      */
    145.     public function getBirthday()
    146.     {
    147.         $result = null;
    148.         if (isset($this->userInfo['birthday']))
    149.         {
    150.             $result = date('d.m.Y', strtotime($this->userInfo[$this->socialFieldsMap['birthday']]));
    151.         }
    152.         return $result;
    153.     }
    154.  
    155.     /**
    156.      * Return name of auth provider
    157.      *
    158.      * @return string
    159.      */
    160.     public function getProvider()
    161.     {
    162.         return $this->provider;
    163.     }
    164.  
    165.     public function getProviderId()
    166.     {
    167.         return $this->id;
    168.     }
    169.  
    170.     /**
    171.      * Get authentication url
    172.      *
    173.      * @return string
    174.      */
    175.     public function getAuthUrl()
    176.     {
    177.         $config = $this->prepareAuthParams();
    178.         return $result = $config['auth_url'] . '?' . urldecode(http_build_query($config['auth_params']));
    179.     }
    180.  
    181.     /**
    182.      * Make post request and return result
    183.      *
    184.      * @param string $url
    185.      * @param string $params
    186.      * @param bool $parse
    187.      * @return array|string
    188.      */
    189.     protected function post($url, $params, $parse = true)
    190.     {
    191.         $curl = curl_init();
    192.         curl_setopt($curl, CURLOPT_URL, $url);
    193.         curl_setopt($curl, CURLOPT_POST, 1);
    194.         curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
    195.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    196.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    197.         $result = curl_exec($curl);
    198.         curl_close($curl);
    199.  
    200.         if ($parse) {
    201.             $result = json_decode($result, true);
    202.         }
    203.  
    204.         return $result;
    205.     }
    206.  
    207.     /**
    208.      * Make get request and return result
    209.      *
    210.      * @param $url
    211.      * @param $params
    212.      * @param bool $parse
    213.      * @return mixed
    214.      */
    215.     protected function get($url, $params, $parse = true)
    216.     {
    217.         $curl = curl_init();
    218.         curl_setopt($curl, CURLOPT_URL, $url . '?' . urldecode(http_build_query($params)));
    219.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    220.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    221.         $result = curl_exec($curl);
    222.         curl_close($curl);
    223.  
    224.         if ($parse) {
    225.             $result = json_decode($result, true);
    226.         }
    227.  
    228.         return $result;
    229.     }
    230. }
    код вызова функции, тоже переделал чуть

    Код (Text):
    1. [code]<?php
    2.     require_once 'lib/SocialAuther/autoload.php';
    3.     require_once 'config.inc.php';
    4.  
    5.     $adapters = array();
    6.     foreach($mysqli->query("SELECT * FROM `Socials` WHERE `Exist`!=0") as $row)
    7.     {
    8.             $class = 'SocialAuther\Adapter\\' . ucfirst($row['provider']);
    9.             $adapters[$row['provider']] = new $class($row);
    10.     }
    11.     if(isset($_GET['provider']) && array_key_exists($_GET['provider'], $adapters) && !isset($_SESSION['user']))
    12.     {
    13.         $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);
    14.  
    15.         if($auther->authenticate())
    16.         {
    17.             $result = $mysqli->query
    18.             (
    19.                 "SELECT * FROM `Accounts` WHERE `provider_id` = '{$auther->getProviderId()}' AND `social_id` = '{$auther->socialId}' LIMIT 1"
    20.             );//сейчас вызывается так и тут
    21.  
    22.             $record = $result->fetch_assoc();
    23.             if(!$record)
    24.             {
    25.                 $values = array
    26.                 (
    27.                     $auther->getProviderId(),
    28.                     $auther->socialId,//сейчас вызывается так и тут раньше вызывал $auther->_get('socialId'),
    29.                     $auther->getName(),
    30.                     $auther->getEmail(),
    31.                     $auther->getSocialPage(),
    32.                     $auther->getSex(),
    33.                     date('Y-m-d', strtotime($auther->getBirthday())),
    34.                     $auther->getAvatar()
    35.                 );
    36.  
    37.                 $query = "INSERT INTO `Accounts` (`provider_id`, `social_id`, `name`, `email`, `social_page`, `sex`, `birthday`, `avatar`) VALUES ('";
    38.                 $query .= implode("', '", $values) . "')";
    39.                 $result = $mysqli->query($query);
    40.             }
    41.             else
    42.             {
    43.                 $userFromDb     = new stdClass();
    44.                 $userFromDb->provider   = $record['provider_id'];
    45.                 $userFromDb->socialId   = $record['social_id'];
    46.                 $userFromDb->name   = $record['name'];
    47.                 $userFromDb->email  = $record['email'];
    48.                 $userFromDb->socialPage = $record['social_page'];
    49.                 $userFromDb->sex    = $record['sex'];
    50.                 $userFromDb->birthday   = date('m.d.Y', strtotime($record['birthday']));
    51.                 $userFromDb->avatar = $record['avatar'];
    52.             }
    53.  
    54.             $user           = new stdClass();
    55.             $user->provider     = $auther->getProvider();
    56.             $user->socialId     = $auther->getSocialId();
    57.             $user->name     = $auther->getName();
    58.             $user->email        = $auther->getEmail();
    59.             $user->socialPage   = $auther->getSocialPage();
    60.             $user->sex      = $auther->getSex();
    61.             $user->birthday     = $auther->getBirthday();
    62.             $user->avatar       = $auther->getAvatar();
    63.  
    64.             if (isset($userFromDb) && $userFromDb != $user)
    65.             {
    66.                 $idToUpdate = $record['id'];
    67.                 $birthday = date('Y-m-d', strtotime($user->birthday));
    68.  
    69.                 mysql_query
    70.                 (
    71.                     "UPDATE `users` SET " .
    72.                     "`social_id` = '{$user->socialId}', `name` = '{$user->name}', `email` = '{$user->email}', " .
    73.                     "`social_page` = '{$user->socialPage}', `sex` = '{$user->sex}', " .
    74.                     "`birthday` = '{$birthday}', `avatar` = '$user->avatar' " .
    75.                     "WHERE `id`='{$idToUpdate}'"
    76.                 );
    77.             }
    78.             $_SESSION['user'] = $user;
    79.         }
    80.         header("location:index.php");
    81.  
    82.     }
    83. ?>
    84. </html>
    [/code]

    новым способом она как оказалось даже не вызывается