对象解构的确切顺序是什么?
从测试开始,我有一个想法:当前范围的FIFO.
class test1
{
public function __destruct()
{
echo "test1\n";
}
}
class test2
{
public function __destruct()
{
echo "test2\n";
}
}
$a = new test1();
$b = new test2();
Run Code Online (Sandbox Code Playgroud)
它会一次又一次地产生相同的结果:
test1
test2
Run Code Online (Sandbox Code Playgroud)
的PHP手册是模糊的(重点煤矿突出不确定度):"为有特定对象的任何其它引用的析构函数方法将被立即调用,或者在关断期间,任何顺序 ".
解构的确切顺序是什么?任何人都可以详细描述PHP使用的销毁顺序的实现吗?而且,如果这个顺序在任何和所有PHP版本之间不一致,那么任何人都可以查明这个订单改变的PHP版本吗?
有没有办法使用字符串作为类名动态创建对象?
我已经离开VB好几年了,但是为了解决另一种语言的问题,我不得不在这个中开发一个包装器.我有一个工厂方法,可以根据其他地方的输入动态创建和返回一个类型的对象.提供的输入是从中创建对象的类名.正常语法意味着必须明确拼写整个类.要做到这一点,实际上可能有数百个if/then或者case来处理引用的libs中所有可用的类/对象选择:
If c_name = "Button" then obj = new System.Windows.Forms.Button
If c_name = "Form" then obj = new System.Windows.Forms.Form
....
Run Code Online (Sandbox Code Playgroud)
我希望将所有这些案例处理减少到一行:IE ...
my_class_name = "whateverclass"
obj = new System.Windows.Forms.my_class_name()
Run Code Online (Sandbox Code Playgroud)
在PHP中,这样处理就像......
$my_class_name = "whateverclass";
$obj = new $my_class_name();
Run Code Online (Sandbox Code Playgroud)
编辑:看看一些答案,我想我在这里已经超出了我的想法.我确实设法使用Assembly类的CreateInstance方法变体使其工作,即使我对这种变体更感兴趣,提供更多选项,包括提供构造参数......
my_type_name = "System.Windows.Forms.Button"
asmb_name = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
button1 = Reflection.Assembly.Load(asmb_name).CreateInstance(my_type_name)
Run Code Online (Sandbox Code Playgroud)
换句话说,它需要一种方法来做到这一点,而不是任何固有的语言语法? 当使用完整的汇编字符串和类路径时,此Activator变体也起作用.我怀疑CreateInstance可能没有完全的能力让我像对待它们一样对待对象,即obj = new System.Windows.Forms.Button.这就是为什么我不能简单地使用CreateObject.如果没有自然语言功能允许您将类名替换为字符串,那么是否有人能够深入了解我可以使用哪些限制CreateInstance?
另外,基本的Activator.CreateInstance(在Unwrap之后)和Assembly.CreateInstance方法之间是否存在差异?
使用Python 3.3平台独立于此问题.
对于Entry窗口小部件,您可以将变量绑定到此窗口小部件的文本内容,如下所示(请注意构造函数中的textvariable参数Entry):
var = tkinter.StringVar()
entryField = tkinter.Entry(master, textvariable=var)
e.pack()
var.set("a new value") # entryField text now updated with this value
s = var.get() # whatever text now appears in entryField
Run Code Online (Sandbox Code Playgroud)
Text然而,对于小部件,没有这样的变量绑定功能.Text如果感兴趣的话,类定义应该可以从%python dir%/ Lib/tkinter/__ init__.py中的第2927行开始,适用于Windows版本中的Python 3.3.
如何使用Text窗口小部件最好地模拟此变量绑定功能?我的想法是将一个小部件绑定tkinter.StringVar到一个Text小部件,然后获取/设置所有文本.
我最终继承tkinter.Frame作为一个Text包装器,它接受一个textvariable期望作为tkinter.Variable实例的构造函数参数.我下面的例子中我唯一没有继承的Text原因只是因为我也想要一个滚动条,但这并不重要.
以下是我的实验代码.为了与我原来的问题以及问题如何解决(?)完全相关,重要的是self.textvariable.get = self.GetText和self.textvariable.set = self.SetText.基本上,我正在覆盖传入tkinter.Variable对象的get和set方法到我自己的设备......
class TextExtension( tkinter.Frame ): …Run Code Online (Sandbox Code Playgroud) 我是MySQL索引的全新手.我在MySQL 5.0x上有几个MyISAM表,其中utf8字符集和排序规则各有100k +记录.主键通常是整数.每个表上的许多列可能具有重复值.
我需要快速计算,求和,平均或以其他方式对每个表中的任意数量的字段执行自定义计算,或者加入任意数量的其他字段.
我发现这个页面概述了MySQL索引的用法:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html,但我仍然不确定我是否正确使用索引.就在我认为我已经从我想要计算的字段集合中创建完美索引时,我得到"索引必须低于1000字节"错误.
任何人都可以解释如何最有效地创建和使用索引来加速查询?
警告:在这种情况下升级Mysql是不可能的.使用Navicat Light进行数据库管理,但不需要此应用程序.
我有一个画布,我向其中添加各种对象,例如文本对象等。我向每个画布子对象添加“标签”属性。在下面的示例中,我为绝对支持的“tag”属性添加了一个字典:
import tkinter
window = tkinter.Tk()
myCanvas = tkinter.Canvas( window, width = 400, height = 400 )
myCanvas.pack()
textItemTags = { "id": 1, "name": "test" }
textItemContents = "asdf"
textItem = myCanvas.create_text( 1, 1, tags = textItemTags, text = textItemContents )
# some method later on now tries to retrieve tag values for a selected canvas child object...
searchTags = myCanvas.gettags( textItem )
print( searchTags ) # array of strings
print( isinstance( searchTags[0], str ) ) # true..?
Run Code Online (Sandbox Code Playgroud)
问题:注意searchTags …