最近,我项目的安全团队发布了一个安全的代码指南文档,旨在用作我们的代码审查的一部分.让我印象深刻的第一件事是"不要使用内部课程".我认为这似乎是一个非常沉重和彻底的声明.如果使用正确,内部类是好的吗?但我做了一些谷歌搜索并找到了这个,为方便起见,这里引用.
规则5:不要使用内部类
一些Java语言书籍说内部类只能被包含它们的外部类访问.这不是真的.Java字节代码没有内部类的概念,因此内部类由编译器转换为恰好可以被同一个包中的任何代码访问的普通类.规则4表示不依赖于包装范围进行保护.
但等等,情况变得更糟.内部类可以访问封闭外部类的字段,即使这些字段被声明为私有.内部类被翻译成一个单独的类.为了允许这个单独的类访问外部类的字段,编译器以静默方式将这些字段从私有更改为包范围!内部类暴露出来已经够糟糕了,但更糟糕的是,编译器正在默默地推翻你将某些字段设为私有的决定.如果你能提供帮助,请不要使用内部类.(具有讽刺意味的是,新的Java 2 doPrivileged()API使用指南建议您使用内部类来编写特权代码.这是我们不喜欢doPrivileged()API的一个原因.)
我的问题是
我想摆脱我的定义列表格式Zend_Form
.这是我要去的布局:
<form>
<p>
<label for="email" class="required">Your email address:</label>
<input type="text" name="email" id="email" value="">
</p>
<p>
<input type="submit" name="submit" id="submit" value="Subscribe">
</p>
<input type="hidden" name="active" value="true" id="active">
<input type="hidden" name="signupDate" value="" id="signupDate">
</form>
Run Code Online (Sandbox Code Playgroud)
为了获得这种布局,我需要对表单做些什么?
class Default_Form_Subscribe extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->addElement('text', 'email', array(
'label' => 'Email address:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array('EmailAddress')
));
$this->addElement('submit', 'submit', array(
'label' => 'Subscribe',
'ignore' => true
));
$this->addElement('hidden', 'active', array(
'value'=>'true'
));
$this->addElement('hidden', 'signupDate', array( …
Run Code Online (Sandbox Code Playgroud) 出于自我提升/拓宽视野的原因,我决定使用K&R'C编程语言书来学习C的一些基础知识.
我一直在跟随练习,使用Bloodhsed DEV C++ 4.9.9.2作为我的IDE.
我遇到了以下练习 - 计算输入中的字符:
main()
{
double nc;
for(nc = 0; getchar() != EOF; ++nc);
printf("&.0f\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
此代码符合并运行,没有错误.
但是,当我在控制台窗口中输入一个字符串并按下回车时,我没有得到任何输出,即显示字符串中有多少字符的数字.例如,如果我在控制台窗口中键入'test',我希望4显示为输出.
我确定问题只是我设置IDE的方式?或者我错过了一些更基本的东西?
任何帮助非常感谢.来自VB背景,我真的很兴奋学习像C这样的不同语言,并掌握指针!
编辑
这里也给出了我的问题的相关答案,非常有用: 为什么getchar()不能在控制台上识别返回EOF?
首先,我的上下文是需要将浮点文字(字符串)转换为float/double值的编译器编写器.在过去的15年里,我没有做任何浮点编程,所以我很确定这是一个完全愚蠢的新手问题.
double res;
errno=0;
*res = strtod((const char*)literal,NULL);
if (errno==ERANGE) throw_a_literal_out_of_range_exception();
return res;
Run Code Online (Sandbox Code Playgroud)
但是c运行时库中没有"strtof"函数?
编辑:澄清.我已经知道字符串'literal'是C浮点的有效模式.它已经通过了正则表达式测试.我只想检查是否存在范围/精度问题.
原因在于用户可以编写的Eiffel源代码
a := {REAL_32} 3.1415
b := {REAL_32} 3.0E200
Run Code Online (Sandbox Code Playgroud)
将写入的浮点数explit转换为32位浮点数.我认为在第二种情况下,编译器应检测到该值超出范围并引发错误或至少发出警告.
我有一个表单元素,我按要求设置:
$this->addElement('text', 'email', array(
'label' => 'Email address:',
'required' => true
));
Run Code Online (Sandbox Code Playgroud)
因为我设置为true,所以它确保它不是空的.默认错误消息如下所示:
"Value is required and can't be empty"
Run Code Online (Sandbox Code Playgroud)
我尝试在验证器上设置消息,但这会引发致命错误:
$validator = $this->getElement('email')->getValidator('NotEmpty');
$validator->setMessage('Please enter your email address.');
Run Code Online (Sandbox Code Playgroud)
在非对象上调用成员函数setMessage()
如何将消息设置为自定义错误消息?
我正在尝试获取当前正在运行的函数的名称.根据我的阅读,这应该可以使用:
(arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/)
Run Code Online (Sandbox Code Playgroud)
但是,当我在Firefox和Safari(Mac上的最新版本)中运行它时,不会返回该名称.
console.log(arguments.callee)返回函数的源,但不返回指定的名称.arguments.callee.name返回一个空字符串.
我的示例代码如下:
var testobj = {
testfunc: function(){
console.log( (arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/) );
}
}
testobj.testfunc();
Run Code Online (Sandbox Code Playgroud) <?xml version="1.0" encoding="utf-8"?>
<PHP_Adapter>
<Adapter>
<ID>11</ID>
<Provider>22</Provider>
<Connectstring>33</Connectstring>
</Adapter>
</PHP_Adapter>
Run Code Online (Sandbox Code Playgroud)
这个我的Xml文件有什么不对?
bool CheckAdapterExist(string aid)
{
DataTable dt = new DataTable();
dt.ReadXml(axml);
MessageBox.Show(dt.Rows[0]["ID"].ToString());
return true;
}
Run Code Online (Sandbox Code Playgroud) 假设我从一个笔尖加载了一个视图控制器,并决定对场景后面的一个子视图做一些事情.在稍后的时刻,我会显示这个视图控制器的视图.
viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[viewController.someSubview doSomething];
//later on
[mainView addSubview:viewController.view];
Run Code Online (Sandbox Code Playgroud)
问题是,在视图出现之前似乎没有加载someSubview对象,因此不调用doSomething方法.到目前为止,我的解决方法是致电:
[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
首先初始化viewcontroller的子视图.有没有更优雅的方式(如loadSubviews方法或其他东西)为此任务?
我正在和Kohana一起开始使用PHPUnit.我的应用程序有许多控制器,它只是从某种形式获取数据,验证和插入/更新/删除到/ - /从数据库.我应该如何为此编写测试用例.
我知道如果我想测试一个函数,我会编写数据提供程序函数,只是将返回值与预期函数进行比较.但我的输入数据(来自表单的数据)正在$_POST
变量中传递.我该怎么测试呢?之后,我应该检查插入的数据是否真的在数据库中?请给出我对这类测试的一些指导或链接到一些示例/教程.谢谢.