2014-02-10 51 views
0

我有一個簡單的類來告訴一個CSV文件的統計信息。PHP類 - 檢索方法的數據

其中一種方法是打破我在構造函數中指定的csv文件的某些部分。

我不知道如何有選擇地得到這些變量,所以我只是全部迴應它們。 但我想將它們放入自己的變量中,以供我在實例化對象後抓取。

class.OpenCSV.php

<?php 
class OpenCSV { 
    private $filepath; 

    public function __construct($filepath = __FILE__){ 
    $this->filepath = $filepath; 
    if(!is_readable($filepath)){ 
    echo("Filepath not found or not readable"."\n"); 
    exit(); 
    } 

    public function reviewFileStats(){ 
     echo "-----------------------------------\n"; 
     $path_parts = pathinfo($this->filepath); 
     echo "filepath: \t".$this->filepath. "\n"; 
     echo "dirname: \t".$path_parts['dirname']. "\n"; 
     echo "basename: \t".$path_parts['basename']. "\n"; 
     echo "filename: \t".$path_parts['filename']. "\n"; 
     echo "extension: \t".$path_parts['extension']. "\n"; 
     echo "-----------------------------------\n"; 
    }//eof reviewFileStats 

} 
?> 

showfile.php

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

$csvfile = 'some_csv_file.csv'; 
$csvObj = new OpenCSV($csvfile); 
$csvObj->reviewFileStats(); 

?> 

現在,它顯示:

----------------------------------- 
filepath:  /home/charlie/documents/some_csv_file.csv 
dirname:  /home/charlie/documents 
basename:  some_csv_file.csv 
filename:  some_csv_file 
extension:  csv 
----------------------------------- 

這是偉大的,直到我只是想只選擇其中之一。 如何我剛剛打電話時的方法reviewFileStats

我知道這是一個簡單的,但我還是新來的OO世界檢索每一個分開。

回答

2

更改reviewFileStatistics功能如下:

public function reviewFileStats($return_what = 'all'){ 

    $path_parts = pathinfo($this->filepath); 

    $filepath = $this->filepath; 
    $dirname = $path_parts['dirname']; 
    $basename = $path_parts['basename']; 
    $filename = $path_parts['filename']; 
    $extension = $path_parts['extension']; 

    if($return_what==='all') 
    { 
     return array('filepath' => $filepath, 'dirname' => $dirname, 'basename' => $basename, 'filename' => $filename, 'extension' => $extension); 
    } 

    if(isset($$return_what)) 
    { 
     return $$return_what; 
    } 

    return false; 
} 

然後就可以調用的項目是這樣的:

echo 'Filepath: ' . $csvObj->reviewFileStats('filepath'); // Outputs the filepath 
echo 'Filename: ' . $csvObj->reviewFileStats('filename'); // Outputs the filenmae 

如果你想輸出的一切:

foreach($csvObj->reviewFileStats('all') as $key => $value) 
{ 
    echo $key . ': ' . $value . '<br />'; 
} 
+0

呃,請告訴我downvote呢?這工作正常。並且是用戶所要求的。 –

+0

事實上,什麼是downvote?我剛剛提出過這個問題,因爲它很相似,但是我對這個問題的回答更好。 –

+0

謝謝@Seçkin,我會鼓勵你的,因爲它是一個更優雅的解決方案。 –

3

你可以使用一個具體的get方法是這樣的:

public function getFileStat($stat = null) { 
    if($stat) { 
     $path_parts = pathinfo($this->filepath); 

     // Return the info if it exists, null if not. 
     return isset($path_parts[$stat]) ? $path_parts[$stat] : null; 
    } 
    // Return the filepath if $stat is not specified. 
    return $this->filepath; 
} 

而且你可以使用它像這樣:

$csvfile = 'some_csv_file.csv'; 
$csvObj = new OpenCSV($csvfile); 
$filepath = $csvObj->getFileStat(); 
$basename = $csvObj->getFileStat('basename'); 
// ... 
0

這可能使更多的SENCE封裝軟件信息到另一個類,說FileInfo類。

class FileInfo 
{ 
    public $dirname; 

    public $basename; 

    public $filename; 

    public $extension; 

    public function __construct($filePath) 
    { 
    $this->init($filePath); 
    } 

    public function init($filePath) 
    { 
    $data = pathinfo($this->filepath); 
    $this->dirname = $data['dirname']; 
    $this->basename = $data['basename']; 
    $this->filename = $data['filename']; 
    $this->extension = $data['extension']; 
    } 

} 

然後您可以將該類附加到OpenCsv

class OpenCsv 
{ 
    protected $filePath; 

    protected $fileInfo; 

    public function __construct($filePath) 
    { 
    $this->setFilePath($filePath); 
    } 

    public function setFilePath($path) 
    { 
    $this->fileInfo = new FileInfo($path); 
    $this->filePath = $path; 
    } 

    public function getFileInfo() 
    { 
    return $this->fileInfo; 
    } 
} 

然後在客戶端代碼

$csv = new OpenCsv('/foo/bar/file.txt'); 
$info = $csv->getFileInfo(); 

echo sprintf(
    'The file name \'%s\' has the extention \'%s\'', 
    $info->filename, 
    $info->extention 
);