ООП PHP с FB Graph API - PullRequest
       1

ООП PHP с FB Graph API

1 голос
/ 20 ноября 2011

Я создаю объект Student с использованием ООП в PHP через API Graph Facebook.Моя проблема заключается в том, что не все пользователи совместно используют один и тот же объем данных на FB, поэтому, если конкретный пользователь не перечисляет определенные переменные, созданные в объекте, я получаю неопределенные сообщения о переменных.Как лучше всего подготовиться к этому, то есть создать объект, независимо от того, поделился ли пользователь всеми данными объекта или нет?Код ниже:

<?php
require_once('class.Student.php');

$name = $user_profile['name'];
$hometown = $user_profile['hometown']['name'];
$location = $user_profile['location']['name'];
$birthday = $user_profile['birthday'];
$highschool = $user_profile['education'][0]['school']['name'];
$hsgrad = $user_profile['education'][0]['year']['name'];
$collegeid = $user_profile['education'][1]['school']['id'];
$college = $user_profile['education'][1]['school']['name'];
$majorid = $user_profile['education'][1]['concentration'][0]['id'];
$major = $user_profile['education'][1]['concentration'][0]['name'];
$grad = $user_profile['education'][1]['year']['name'];
$company = $user_profile['work'][0]['employer']['name'];
$jobtitle = $user_profile['work'][0]['position']['name'];
$startdate = $user_profile['work'][0]['start_date'];
$interest = $interests['data'][0]['name'];
$interestid = $interests['data'][0]['id'];

$objStudent = new Student($name,$hometown,$location,$birthday,$highschool,$hsgrad,$collegeid,$college,$majorid,$major,$grad,$company,$jobtitle,$startdate,$interest,$interestid);   

?>

И сам класс:

<?php

class Student {

public $name;
public $hometown;
public $location;
public $birthday;
public $highschool;
public $hsgrad;
public $collegeid;
public $college;
public $majorid;
public $major;
public $grad;
public $company;
public $jobtitle;
public $startdate;
public $interest;
public $interestid;


    public function __construct($name,$hometown,$location,$birthday,$highschool,$hsgrad,$collegeid,$college,$majorid,$major,$grad,$company,$jobtitle,$startdate,$interest,$interestid) {
        $this->name = $name;
        $this->hometown = $hometown;
        $this->location = $location;
        $this->birthday = $birthday;
        $this->highschool = $highschool;
        $this->hsgrad = $hsgrad;
        $this->collegeid = $collegeid;
        $this->college = $college;
        $this->majorid = $majorid;
        $this->major = $major;
        $this->grad = $grad;
        $this->company = $company;
        $this->jobtitle = $jobtitle;
        $this->startdate = $startdate;
        $this->interest = $interest;
        $this->interestid = $interestid;
    }

Я понимаю, как справиться с этим в функциях класса, используя простой isset, такой как:

  function goalRecommender () {

        if (isset($this->interest)) {
            if ($this->interest =='Computer Science') {
            echo "<p>Based on your interest in Computer Science, we recommend working in the software industry. Furthermore, your interest in user interface design would be thoroughly put to use at Facebook, one of the fastest growing technology companies in the world. If you would like to pursue another goal,
            search our database to the right or click one of the 'popular goal' links.<p>";
            }
            elseif ($this->interests =='Finance') {
                echo "<p>You're interested in Finance</p>";
            }
            elseif ($this->interests =='Film') {
                echo "<p>You're interested in Film</p>";
        }
            elseif ($this->interests =='Marketing') {
                echo "<p>You're interested in Marketing</p>";
            } else {
                echo "<p>Choose a goal.</p>";
            }
        }   else  {
                echo "<p>What are you interested in?
                <select>
                <option>Finance</option>
                <option>Marketing</option>
                <option>Film</option>
                <option>Software</option>
                </select></p>";
        }
    } 

Но я просто изучаю ООП в PHP и не знаю, как это сделать при создании объекта.Любое руководство будет с благодарностью.

1 Ответ

0 голосов
/ 20 ноября 2011

Существует много для вашего класса:

  • Пусть ваш конструктор Student возьмет массив. Это уменьшит боль при переменных настройкахособенно если вы в конечном итоге расширяете Student. Уточнение: вместо того, чтобы указывать имя, колледж, родной город, день рождения и т. д., вы передаете массив, содержащий всю эту информацию.

    $name = $user_profile['name'];
    $hometown = $user_profile['hometown']['name'];
    
    //becomes
    
    $user['name'] = $user_profile['name'];
    $user['hometown'] = $user_profile['hometown']['name'];
    
    • Это быстрее. Стоимость любого параметра невелика, но когда у вас есть такие тонны, он может по крайней мере сделать отметку.
    • Проще позвонить. Вам больше не нужно запоминать порядок переменных."Это имя, родной город, место, день рождения? Или имя, день рождения, место, родной город?"У вас есть тонны переменных, нет способа легко запомнить это.
    • Это легче изменить. Добавление переменной?Нет проблем, добавьте его в массив и проверьте его внутри функции.Удаление переменной?Это трудно сделать, но только если он находится в массиве.

      public function __construct(
          $name,
          $hometown,
          $location,
          $birthday,
          $highschool,
          $hsgrad,
          $collegeid,
          $college,
          $majorid,
          $major,
          $grad,
          $company,
          $jobtitle,
          $startdate,
          $interest,
          $interestid) {
      
      //becomes
      public function __construct(array $info) {
      
  • Ваши переменные должны быть protected или private, а не public. Это в значительной степени отраслевой стандарт.
    • Вы захотите предоставить методы получения и установки , потому что переменные недоступны.Многие IDE могут сделать это за вас.

Что касается ваших сообщений об ошибках:

  • Вы должны убедиться, что переменная существует, прежде чем вы на самом деле получите к ней доступ. Используйте для этого функцию isset():

    $hometown = isset($user_profile['hometown']['name']) ? $user_profile['hometown']['name'] : null;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...