2010-08-04 63 views
4

Komodo是否支持getter/setter自動生成NetBeans或Eclipse?如果是這樣,我該如何使用它?我似乎無法找到它。PHP Komodo getter/setter自動生成

+0

等等,Eclipse是否這樣做?或者你的意思是Zend Studio? – 2010-08-12 17:27:35

+0

我應該澄清一下 - Eclipse是爲Java做的。 – ashurexm 2010-08-12 21:10:33

回答

1

我不認爲科莫多[編輯/打開]支持它,不確定科莫多IDE。

0

Komodo IDE和Edit都不支持它。

使用PHP,你想從中生成代碼?

  • 埃裏克
+0

來自類 – ashurexm 2010-08-12 21:10:57

0

這是沒有辦法完全或成品,但這裏有一個科莫多6兼容蟒蛇宏腳本我寫的自動生成一個完整的PHP類制定者/吸氣。

from xpcom import components 
    import re 

    viewSvc = components.classes["@activestate.com/koViewService;1"]\ 
     .getService(components.interfaces.koIViewService) 
    view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView) 

    sm = view.scimoz 
    sm.currentPos # current position in the editor 
    sm.text   # editor text 
    sm.selText  # the selected text 
    #sm.text = "Hello World!" 

    output = u"\n" 

    setterTemplate = """ 
     function set%s($value){ 
      $this->%s = $value; 
     } 
    """ 

    getterTemplate = """ 
     /** 
     *@return string 
     */ 
     function get%s(){ 
      return $this->%s; 
     } 
    """ 

    propertyTemplate = """ 
    %s 

    %s 
    """ 

    prefixSize = len(u"private $") 

    def formalName(rawName): 
     return u"%s" % "".join([part.title() for part in rawName.split("_")]) 




    #todo find a better way to split lines, what if its Mac or Windows format? 
    for line in sm.text.split("\n"): 
     if line.strip().startswith("private $"): 
      #trim of the private $ and trailing semi-colon 
      realName = line.strip()[prefixSize:-1]   
      output += propertyTemplate % (setterTemplate %(formalName(realName), realName), getterTemplate % (formalName(realName), realName))   



    sm.insertText(sm.currentPos, output) 

給喜歡用類酒吧foo.php作爲目前

class Bar { 
    private $id; 
    private $name_first; 
} 

唯一一個文件中,它注入

function setId($value){ 
     $this->id = $value; 
    } 



    /** 
    *@return string 
    */ 
    function getId(){ 
     return $this->id; 
    } 



    function setNameFirst($value){ 
     $this->name_first = $value; 
    } 



    /** 
    *@return string 
    */ 
    function getNameFirst(){ 
     return $this->name_first; 
    } 

這對我的使用不夠好(我可以雷泰一切很快),但我會更新這個答案,如果我在腳本上大大提高。

1

這是大衛的代碼修改後的版本,並用正確的行結束工作:

from xpcom import components 
import re 

viewSvc = components.classes["@activestate.com/koViewService;1"]\ 
    .getService(components.interfaces.koIViewService) 
view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView) 

sm = view.scimoz 
sm.currentPos # current position in the editor 
sm.text   # editor text 
sm.selText  # the selected text 

output = u"\n" 

setterTemplate = """ 
function set%s($value){ 
    $this->%s = $value; 
} 
""" 

getterTemplate = """ 
/** 
*@return string 
*/ 
function get%s(){ 
    return $this->%s; 
} 
""" 

propertyTemplate = """ 
%s 

%s 
""" 

prefixSize = len(u"private $") 

def formalName(rawName): 
    return u"%s" % "".join([part.title() for part in rawName.split("_")]) 


eol = u"\n"   #UNIX \n (default) sm.eOLMode == 2 
if sm.eOLMode == 0: #DOS/Windows \r\n 
    eol = u"\r\n" 
elif sm.eOLMode == 1: #Mac Classic \r 
    eol = u"\r" 

for line in sm.text.split(eol): 
    if line.strip().startswith("private $"): 
     #trim of the private $ and trailing semi-colon 
     realName = line.strip()[prefixSize:-1]   
     output += propertyTemplate % (setterTemplate %(formalName(realName), realName), getterTemplate % (formalName(realName), realName))   



output = output.replace("\n", eol) 
sm.insertText(sm.currentPos, output) 
4

這是修改/改進的版本有一個更可讀的代碼。也會從屬性聲明中刪除默認值,如在public $prop = array();

from xpcom import components 
import re 

viewSvc = components.classes["@activestate.com/koViewService;1"]\ 
    .getService(components.interfaces.koIViewService) 
view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView) 

sm = view.scimoz 
sm.currentPos # current position in the editor 
sm.text   # editor text 
       # sm.selText  # the selected text 

output = u"\n" 

setterTemplate = """ 
/** 
* Sets %s 
* 
* @param mixed $value 
* @return $this 
*/ 
public function set%s($value) { 
    $this->%s = $value; 
    return $this; 
}""" 

getterTemplate = """ 
/** 
* Gets %s 
* 
* @return string 
*/ 
public function get%s() { 
    return $this->%s; 
} 
""" 

propertyTemplate = """%s 
%s""" 

prefixSizePv = len(u"private $") 
prefixSizePu = len(u"public $") 
prefixSizePr = len(u"protected $") 

def formalName(rawName): 
    return u"%s%s" % (rawName[0:1].upper(), rawName[1:]) 

#todo find a better way to split lines, what if its Mac or Windows format? 
for line in sm.text.split("\n"): 
    tmpLine = line.strip() 
    hasPriv = tmpLine.startswith("private $") 
    hasPublic = tmpLine.startswith("public $") 
    hasProt = tmpLine.startswith('protected $') 

    if hasPriv or hasPublic or hasProt: 
     if hasPriv: 
      realName = tmpLine[prefixSizePv:-1] 
     elif hasPublic: 
      realName = tmpLine[prefixSizePu:-1] 
     else: 
      realName = tmpLine[prefixSizePr:-1] 

     realName = re.sub('\s?=.*', '', realName); 

     formal = formalName(realName) 
     output += propertyTemplate % (setterTemplate %(realName, formal, realName), getterTemplate % (realName, formal, realName)) 

sm.insertText(sm.currentPos, output) 
+0

的受保護變量令人驚歎,謝謝 – Tom 2014-06-02 10:28:59