2012-02-13 6 views
0

システムのAPIメソッドを準備しています。 Apiはいくつかの言語で利用できますが、最初のバージョンはPHP用にリリースされます。私はどのような命名規則をアクセサメソッドに使用すべきか疑問に思っています。私は、APIのインターフェイスを各言語に非常に似ているか同等にしたいと考えています。私はPHPのためのいくつかのライブラリを読み込み、2命名convetion気づいた:*アクセシビリティーのための命名規則php

1)セット*(などの公共アクセサを)とget()メソッド

class MyClass { 
    private $data; 
    public function getData() { 
    ... 
    } 

    public function setData($value) { 
    ... 
    } 
} 

2)

プレフィックスを取得/セットをドロップアウト
class MyClass { 
    private $data; 
    public function data($value = null) { 
    if (!empty($value) && is_array($value)) { 
     $data = $value; 
    } 
    return $data; 
    } 
} 

私はPHPプログラマーではありません、私はjavaとc/C++での経験がありますので、どのような方法でPHPに行くのかアドバイスをお願いしたいと思いますか?特に、PHPプログラマーにとって、より読みやすく、わかりやすく理解できるものは何か?

私はコメントと賛成意見を読んでいます。

すべてがベストです。

ps。トピックが複製されている場合は、元のトピックに私を指摘するように頼みたいと思います。

+1

コードnr2はどうなりますか? PHP 5.3がオプションであれば、__setと__getマジック関数を使うことができます。 – busypeoples

+0

2番目の方法では何もしませんが、値が配列に失敗してNULLを返す場合は、送信する値を返します。 – CBusBus

答えて

1

これを開始点として試してください。もっとやる必要がありますが、これがオプションの場合は、__getと__setの使い方を知ることができます。

class MyClass { 

    protected $data = array(); 
    protected $acceptedKeys = array('name', 'job', 'sport'); 

    public function __get($key) { 
    if(isset($key) && array_key_exists($key, $this->data)) { 
     return $this->data[$key]; 
    } else { 
     throw new Exception("can not find {$key}"); 
    } 
    } 

    public function __set($key,$val) { 
    if(in_array($key, $this->acceptedKeys)) { 
     $this->data[$key] = $val; 
    } else { 
     throw new Exception('we will need a key value pair'); 
    } 
    } 
} 

try { 
    $myClass = new MyClass(); 
    $myClass->job = 'sports'; 
    $myClass->name = 'test'; 
    print $myClass->job . "\n"; 
    print $myClass->name; 
} catch(Exception $e) { 
    print "error : " . $e->getMessage(); 
} 
+0

なぜこれをPHPにするのですか?シンプルなアクセサーを書くためのコードは、実用的な言語設計ができないことの証です。 – lkraider

3

私はあなたの2番目の提案を実際に使用することはありません。
しかし、私はかなり頻繁に使用される最初のものを見ました。

この場合、私は最初のものと一緒に行きます。

+0

+1賢さの魂は、簡潔さです。 – rdlowrey