2015-05-25 2 views
-2

У меня есть json api. Я пытаюсь прокормить несколько функций. Я не совсем уверен, как сделать глобальный file_get_contents так, чтобы к нему можно было получить доступ сразу несколькими функциями.глобальная переменная file_get_contents вне функции?

Вот мой текущий код PHP:

function getVideoTitle($getVideoID) { 
    $json_output = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$getVideoID."&key={MY_KEY}&fields=items(id,snippet(title,description),statistics)&part=snippet,statistics"); 
    $json = json_decode($json_output, true); 
    $video_title = $json['items'][0]['snippet']['title']; // Video Title 
    return $video_title; 
} 

function getVideoDesc($getVideoID) { 
    $json_output = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$getVideoID."&key={MY_KEY}&fields=items(id,snippet(title,description),statistics)&part=snippet,statistics"); 
    $json = json_decode($json_output, true); 
    $video_description = $json['items'][0]['snippet']['description']; //Description 
    return $video_description; 
} 

echo getVideoTitle($getVideoID); 
echo getVideoDesc($getVideoID); 

Если удалить два $json переменных и поместить их вне функции я получаю ошибку, что не может найти переменную $json.

Кроме того, будет ли это глобальная переменная заставлять ее работать быстрее? Получение API в настоящее время выполняется довольно медленно. Было бы разумнее перейти на Javascript ..? Благодарю.

ответ

2

Если предполагается, что $json является постоянным, то я считаю, что вам лучше создать класс, так как вам нужно предоставить $getVideoID для идентификатора видео, а также вы можете легко изменить видео :)

<?php 
class MyVideoClass { 
    private $json = null; 

    public function __construct($videoID) { 
     $this->changeVideo($videoID); 
    } 

    public function changeVideo($videoID) { 
     $json_output = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$videoID."&key={MY_KEY}&fields=items(id,snippet(title,description),statistics)&part=snippet,statistics"); 
     $this->json = json_decode($json_output, true); 
    } 

    function getVideoTitle() { 
     $video_title = $this->json['items'][0]['snippet']['title']; // Video Title 
     return $video_title; 
    } 

    function getVideoDesc() { 
     $video_description = $this->json['items'][0]['snippet']['description']; //Description 
     return $video_description; 
    } 
} 

// somewhere: 
$myVideo = new MyVideoClass($yourVideoID); 
echo $myVideo->getVideoTitle(); 
echo $myVideo->getVideoDesc(); 

// sometime else 
$myVideo->changeVideo($anotherVideoID); 
echo $myVideo->getVideoTitle(); 
echo $myVideo->getVideoDesc(); 
-1

здесь то, что я написал для вас

<?php 
class Video{ 
private $data; 
public function __construct($videoId, $key){ 
    $json_output = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$videoId."&key=".$key."&fields=items(id,snippet(title,description),statistics)&part=snippet,statistics"); 
    isset($json_output) ? $this->data = $json_output : $this->data = false; 
} 
public function getTitle(){ 
    if($this->data){ 
     $video_title = $this->data['items'][0]['snippet']['title']; // Video Description 
     return $video_title; 
    }else{ 
     return false; 
    } 
} 
public function getDesc(){ 
    if($this->data){ 
     $video_desc = $this->data['items'][0]['snippet']['description']; // Video Title 
     return $video_desc; 
    }else{ 
     return false; 
    } 
    } 

public function change($videoId, $key){ 
    $this->__construct($videoId, $key); 
} 
}  

Пример использования:

include('video.php'); // if you going to save the class in separate file 
$video = new Video('Video-Id-Here', 'your-key'); 
echo $video->getTitle().'<br/>'; 
echo $video->getDesc(); 
//new video 
$video->change('new-video-id', 'new-key'); 
echo $video->getTitle().'<br/>'; 
echo $video->getDesc(); 

и Вы можете добавить дополнительные функции к классу