2017-04-11 123 views
0

我觉得我在这里失去了一些令人难以置信的愚蠢。我不太熟悉OOP校长,特别是在PHP中,我正在努力学习。如何在PHP中访问类方法的属性?我特别想获取从此方法返回的$ AWSresponse属性。 JSON形式的$ AWSresponse的值如下。访问PHP方法生成的方法

在UploadHandler.php我有post()方法(全UploadHandler.php类here):

public $AWSresponse; 
public function post($print_response = true) { 
    if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { 
     return $this->delete($print_response); 
    } 
    $upload = isset($_FILES[$this->options['param_name']]) ? 
     $_FILES[$this->options['param_name']] : null; 
    // Parse the Content-Disposition header, if available: 
    $file_name = $this->get_server_var('HTTP_CONTENT_DISPOSITION') ? 
     rawurldecode(preg_replace(
      '/(^[^"]+")|("$)/', 
      '', 
      $this->get_server_var('HTTP_CONTENT_DISPOSITION') 
     )) : null; 
    // Parse the Content-Range header, which has the following form: 
    // Content-Range: bytes 0-524287/2000000 
    $content_range = $this->get_server_var('HTTP_CONTENT_RANGE') ? 
     preg_split('/[^0-9]+/', $this->get_server_var('HTTP_CONTENT_RANGE')) : null; 
    $size = $content_range ? $content_range[3] : null; 
    $files = array(); 
    if ($upload && is_array($upload['tmp_name'])) { 
     // param_name is an array identifier like "files[]", 
     // $_FILES is a multi-dimensional array: 
     foreach ($upload['tmp_name'] as $index => $value) { 
      $files[] = $this->handle_file_upload(
       $upload['tmp_name'][$index], 
       $file_name ? $file_name : $upload['name'][$index], 
       $size ? $size : $upload['size'][$index], 
       $upload['type'][$index], 
       $upload['error'][$index], 
       $index, 
       $content_range 
      ); 
     } 
    } else { 
     if(isset($_POST['fileSourceChooser']) && $_POST['fileSourceChooser']=='dropbox'){ 

      //http://justinvincent.com/page/1087/how-to-get-the-mime-type-of-a-remote-file-in-php-with-redirects 
      function get_url_mime_type($url){ 
       $ch = curl_init($url); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
       curl_setopt($ch, CURLOPT_HEADER, 1); 
       curl_setopt($ch, CURLOPT_NOBODY, 1); 
       curl_exec($ch); 
       return curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 
      } 
       $upload=$_POST['files']; ////if just a regular post 
       $upload['parse_url']=parse_url($upload['link']); 
       $upload['url']='https://dl.dropboxusercontent.com'.$upload['parse_url']['path']; 
        $files[] = $this->handle_file_upload(
         $upload['url'], 
         $file_name ? $file_name : $upload['name'], 
         $size ? $size : $upload['bytes'], 
         get_url_mime_type($upload['url']), 
         "", 
         null, null, 
         $content_range 
        ); 

        file_put_contents(
         $this->options['upload_dir'].'thumbnail/'.$upload['name'], 
         fopen($upload['thumbnail'], 'r'), 
         FILE_APPEND //$append_file ? FILE_APPEND : 0 
        );       
     } 
     else{ 
      // param_name is a single object identifier like "file", 
      // $_FILES is a one-dimensional array: 
      $files[] = $this->handle_file_upload(
       isset($upload['tmp_name']) ? $upload['tmp_name'] : null, 
       $file_name ? $file_name : (isset($upload['name']) ? 
         $upload['name'] : null), 
       $size ? $size : (isset($upload['size']) ? 
         $upload['size'] : $this->get_server_var('CONTENT_LENGTH')), 
       isset($upload['type']) ? 
         $upload['type'] : $this->get_server_var('CONTENT_TYPE'), 
       isset($upload['error']) ? $upload['error'] : null, 
       null, 
       $content_range 
      );     
     } 
    } 
     $AWSresponse = $this->generate_response(
     array($this->options['param_name'] => $files), 
     $print_response 
    ); 
    return $AWSresponse; 
} 

在index.php文件,我有:

require('UploadHandler.php'); 
$upload_handler = new UploadHandler(); 
$r = $upload_handler->AWSresponse; 
var_dump($r); // returns NULL 

这个类(和关联的jquery插件)将以下内容从$ AWSresponse转储到浏览器的控制台:

{"files":[{"name":"Test(7).mov","size":1202952,"type":"video\/quicktime","url":"https:\/\/prefix.s3.amazonaws.com\/bucket\/Test%20%287%29.mov","deleteUrl":"https\/\/mysite.com\/server\/php\/?file=Test%20%287%29.mov&_method=DELETE","deleteType":"POST"}]} 
+0

vardump应该是var_dump – Nikkorian

+0

哎呀。我已经修复了代码,但我仍然遇到了同样的问题。 – thebarless

+0

我真的不明白你的问题是什么?什么是输出_suppose_看起来像什么? –

回答

1

我想你应该试试这个方法:

require('UploadHandler.php'); 
$upload_handler = new UploadHandler(); 
$myAWSresponse = $upload_handler->post(); 
var_dump($myAWSresponse); 
0

我认为你应该使用$this->AWSresponse访问类属性在function post(),如:

return $this->AWSresponse; 

,当你在$AWSresponse使用$this->AWSresponse像赋值:

$this->AWSresponse = $this->generate_response(
     array($this->options['param_name'] => $files), 
     $print_response 
    ); 
+0

如果我从课外以外打电话,这个$是否可以工作? – thebarless

+0

编号'$ this'是指“当前”对象的实例。 – domsson

+0

好的,这就是我的想法。也许我是在购物车之前在我的脑海中摇摆。这个班级正在做我想做的事情,并将数据输出到浏览器的控制台。我错在想我需要修改班级吗? – thebarless