PHP Komodo getter/setter自动生成
Komodo是否支持getter/setter自动生成NetBeans或Eclipse?如果是,我该如何使用它?我似乎找不到它。我认为Komodo[Edit/Open]不支持它,不确定Komodo IDE是否支持它。Komodo IDE和Edit都不支持它 对于PHP,您希望从什么生成代码PHP Komodo getter/setter自动生成,php,ide,komodo,komodoedit,Php,Ide,Komodo,Komodoedit,Komodo是否支持getter/setter自动生成NetBeans或Eclipse?如果是,我该如何使用它?我似乎找不到它。我认为Komodo[Edit/Open]不支持它,不确定Komodo IDE是否支持它。Komodo IDE和Edit都不支持它 对于PHP,您希望从什么生成代码 埃里克 这绝不是完美的,也不是完美无缺的,但我编写了一个兼容Komodo 6的python宏脚本,用于为整个PHP类自动生成setter/getter from xpcom import compo
- 埃里克
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的文件,其中只有类Bar
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;
}
这对于我的使用来说已经足够好了(我可以很快地重新标记所有内容),但是如果我在脚本上有了显著的改进,我会更新这个答案。这是David代码的修改版本,可以使用正确的行尾:
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)
这是一个修改/改进的版本,代码更可读。还将从属性声明中删除默认值,如在
public$prop=array()中代码>
等等,Eclipse会这样做吗?或者你是说Zend Studio?我应该澄清一下——Eclipse是为Java做这件事的。它是从类中受保护的变量开始的
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)