我有一个PHP5对象将消息传递给另一个,并希望为每个消息附加一个类型.例如,MSG_HOT和MSG_WARM,和MSG_COLD.如果PHP5有一个枚举类型,我可能会用它来定义消息类型,但(除非我错了)没有这样的动物.我看了几个选项:
字符串('MSG_HOT','MSG_WARM'和'MSG_COLD')是不好的,因为我不可避免地会输入类似的东西'MSG_WRAM',事情会破裂.数字遇到同样的问题,也不太清楚.
定义工作:
define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);
Run Code Online (Sandbox Code Playgroud)
但污染全局命名空间,因此需要更详细的名称来确保唯一性.我宁愿不让我的代码乱丢东西APPLICATIONNAME_MESSAGES_TYPE_HOT.
最后,我可以使用类名来区分类型,如下所示:
class MessageHot extends Message {}
class MessageWarm extends Message {}
class MessageCold extends Message {}
class Message
{
public function Type()
{
return get_class($this);
}
public function Data()
{
return $this->data;
}
public function __construct($data)
{
$this->data = $data;
}
private $data;
}
Run Code Online (Sandbox Code Playgroud)
我认为这很好,但对于看起来应该是一个简单的概念也是很多工作.
我错过了一个更好的选择吗?
我对PHP很新,所以如果你有任何想法或建议指出我正确的方向,我将不胜感激.
尝试创建一个简单的函数来检查用户的电子邮件地址是否转换为有效的Gravatar图像,但似乎gravatar.com已更改其标题.
使用get_headers('urlencoded_bad_email@example.com')返回200而不是302.
以下是来自糟糕的重力图像的标题,其中没有一个似乎能够提供帮助,因为它们与有效的重力图像相同:
array(13) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(13) "Server: nginx"
[2]=>
string(35) "Date: Sun, 26 Jul 2009 20:22:07 GMT"
[3]=>
string(24) "Content-Type: image/jpeg"
[4]=>
string(17) "Connection: close"
[5]=>
string(44) "Last-Modified: Sun, 26 Jul 2009 19:47:12 GMT"
[6]=>
string(76) "Content-Disposition: inline; filename="5ed352b75af7175464e354f6651c6e9e.jpg""
[7]=>
string(20) "Content-Length: 3875"
[8]=>
string(32) "X-Varnish: 3883194649 3880834433"
[9]=>
string(16) "Via: 1.1 varnish"
[10]=>
string(38) "Expires: Sun, 26 Jul 2009 20:27:07 GMT"
[11]=>
string(26) "Cache-Control: max-age=300"
[12]=>
string(16) "Source-Age: 1322"
} …Run Code Online (Sandbox Code Playgroud) 我想读取一个包含模式声明的XML文件.
这就是我想做的一切,请阅读.我不在乎它是否有效,但我希望它形成良好.
问题是读者正在尝试读取模式文件,并且失败了.
我甚至不想尝试.
我已经尝试禁用验证,但它仍然坚持尝试读取模式文件.
理想情况下,我想用库存Java 5 JDK来做这件事.
这是我到目前为止所做的,非常简单:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
Run Code Online (Sandbox Code Playgroud)
这是我回来的例外:
java.lang.RuntimeException: java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
Run Code Online (Sandbox Code Playgroud)
是的,这个HAPPENS是一个XHTML模式,但这不是一个"XHTML"问题,它是一个XML问题.只是指出这一点,所以人们不会分心.并且,在这种情况下,W3C基本上是在说"不要求这个东西,这是一个愚蠢的想法",我同意.但是,这又是问题的细节,而不是问题的根源.我不想要求它.
是否有一个Python函数可以从字符串中修剪空格(空格和制表符)?
示例:\t example string\t→example string
在我下面的示例代码中,是否真的需要counter = 0,还是有更好的,更多Python的方式来访问循环计数器?我看到了几个与循环计数器相关的PEP,但是它们被推迟或被拒绝(PEP 212和PEP 281).
这是我的问题的简化示例.在我的实际应用程序中,这是通过图形完成的,整个菜单必须在每一帧重新绘制.但这表明它以简单的文本方式易于重现.
也许我还应该补充一点,我正在使用Python 2.5,尽管如果有特定于2.6或更高版本的方式我仍然感兴趣.
# Draw all the options, but highlight the selected index
def draw_menu(options, selected_index):
counter = 0
for option in options:
if counter == selected_index:
print " [*] %s" % option
else:
print " [ ] %s" % option
counter += 1
options = ['Option 0', 'Option 1', 'Option 2', 'Option 3']
draw_menu(option, 2) # Draw menu with "Option2" selected
Run Code Online (Sandbox Code Playgroud)
运行时,输出:
[ ] Option 0
[ ] Option 1 …Run Code Online (Sandbox Code Playgroud) 我想将一个点传递给使用performSelectorOnMainThread调用的选择器的C++对象.简单地将指针转换为'id'(objc_object*)似乎不起作用.我总是可以编写自己的目标C包装类,但应该有一个相当标准的方法来做到这一点.我没有在苹果的文档中找到任何关于它的东西.
最好的方法是什么?
这就是我想要做的事情:
...
Foo *foo = new Foo(); // Foo is a C++ class
MyObject *myObj = [[MyObject alloc] init]; // Obj-C class
[myObj performSelectorOnMainThread:@selector(someMethod:) withObject:foo waitUntilDone:NO];
...
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想这是一个简单的问题,但在Type类的文档中,他们只讨论了GetInterfaces方法中的接口.
ie typeof(ChildClass).XXX(typeof(ParentClass)
实现以下内容的最佳方法是什么:
### models.py
>>> from django.db import models
>>> from django.contrib.auth.models import User
# Create the client class.
>>> class Client(models.Model):
... user = models.OntToOneField(User)
... zip = ***???***()
### forms.py
>>> from django.forms import ModelForm
# Create the form class.
>>> class ArticleForm(ModelForm):
... class Meta:
... model = Client
Run Code Online (Sandbox Code Playgroud)
我试图让最终结果使用美国邮政编码字段窗体小部件/验证器只使用models.py文件修改...也就是说我不想做以下事情:
### forms.py
>>> from django.forms import ModelForm
>>> from django.contrib.localflavor.us.forms import USZipCodeField
# Create the form class.
>>> class ArticleForm(ModelForm):
... class Meta:
... model = …Run Code Online (Sandbox Code Playgroud) 我在别处问过这个问题,但那里的人似乎不明白我在说什么。
当我访问 PECL 网站时,在那里找到的所有扩展名都在 TGZ 文件中。
这不是问题,任何现代归档程序都可以打开它。
里面总是一个 .tar 文件,里面是源文件。那么,我该怎么办?我对使用 pecl_http 扩展特别感兴趣,但我不知道该怎么做。
注意:.TAR 文件中没有 DLL 文件。一个都没有,一个都没有。你能找到的只是 C 代码和 C 头文件。
我需要一个正则表达式,它限制从0到24的小时输入,其中分数是.25的倍数.请记住必须满足以下条件:
我非常有信心可以收紧以下表达,但这是迄今为止的情况:
(^(([0-9])|(1[0-9])|(2[0-3]))(\.((0*)|(250*)|(50*)|(750*)))?$)|(^24(\.0*)?$)|(^\.((0+)|(250*)|(50*)|(750*))$)
Run Code Online (Sandbox Code Playgroud)
更新:正则表达式验证存在于客户端(javascript)和服务器(asp.net,c#)上.