我试图在事件处理程序中使用JavaScript访问原型类的成员变量 - 我通常使用"this"关键字(或者在事件处理程序的情况下使用"[this of copy]") .不用说,我遇到了一些麻烦.
举个例子,这个HTML片段:
<a id="myLink" href="#">My Link</a>
Run Code Online (Sandbox Code Playgroud)
这个JavaScript代码:
function MyClass()
{
this.field = "value"
this.link = document.getElementById("myLink");
this.link.onclick = this.EventMethod;
}
MyClass.prototype.NormalMethod = function()
{
alert(this.field);
}
MyClass.prototype.EventMethod = function(e)
{
alert(this.field);
}
Run Code Online (Sandbox Code Playgroud)
实例化MyClass对象并调用NormalMethod的工作方式与我预期的完全相同(警告说"值"),但单击链接会产生未定义的值,因为"this"关键字现在引用事件目标(anchor()HTML元素) .
我是原型JavaScript样式的新手,但在过去,使用闭包,我只是在构造函数中复制了"this":
var that = this;
Run Code Online (Sandbox Code Playgroud)
然后我可以通过"that"对象访问事件方法中的成员变量.这似乎不适用于原型代码.还有另一种方法来实现这一目标吗?
谢谢.
基本事实:
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$randSource = MCRYPT_DEV_URANDOM;
Run Code Online (Sandbox Code Playgroud)
注意 这不是严格的编码问题.
语境:
CentOS 7,Apache 2.4.12和PHP 5.6.20.
我正在制作一封HTML电子邮件,其中包含"验证您的电子邮件地址"链接,可以完成注册过程.我的虚拟专用服务器上的所有内容都是UTF-8,所有表单和查询字符串输入都使用多字节(mb)函数进行处理.
背景
作为一个实验(我知道mcrypt库的年龄和状态),我试图解密Blowfish加密的查询字符串参数.假设在上升的过程中,加密序列工作正常,我收到带有链接的电子邮件.
在下来的过程中,hmac_hash()签名(SHA-512,仅用于此实验)正在运行,我能够将每个独立消息(32个字符)与其哈希校验和(128个字符)分开.分离的消息部分的Base64解码正在工作.对于每个参数,我留下复合密文,其中复合密文等于IV +基密码文本.假设我使用一个版本的substr(),以获得IV和基底密文独立地(这是意料之中的).
问题
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 12, needed: 8
Run Code Online (Sandbox Code Playgroud)
假设我已经梳理了PHP手册和Stackoverflow.假设我已经看过类似的其他问题,但不完全像这个问题.假设我在互联网上搜索无济于事.假设我有足够的经验来mb_string正确设置.假设当我遇到当前问题时我会处理mcrypt填充.
多字节问题会干扰解密吗?
base64编码可以IV + base cipher text破坏IV吗?
base64填充可能是个问题吗?
我应该指定更具体的MCRYPT_BLOWFISH_*吗?
为什么河豚IV大小报告8个字节,但很少产生8字节IV?
我应该使用哪个substr(),substr()或者mb_substr(),对于倾向于使所有UTF-8并将所有其他输入作为多字节UTF-8处理的设置.我知道这是一个奇怪的问题,但所有的PHP手册mycrypt解密序列示例都使用substr(),没有使用mb_substr().我的网站上的所有内容都尽可能使用mb_functions,我不介意使用substr()它,如果它解决了我的问题,但它没有解决它.当我使用时mb_substr(),我收到以下警告.
PHP: Warning mcrypt_generic_init(): Iv …Run Code Online (Sandbox Code Playgroud) mixed filter_var_array ( array $data [, mixed $definition [, bool $add_empty = true ]] )
Run Code Online (Sandbox Code Playgroud)
对于调用的$ definition参数,这样的东西可以filter_var_array()工作吗?(数组语法> = PHP5.4)
$def = [
'firstName' => ['filter' => FILTER_SANITIZE_STRING,
'flags' => [FILTER_REQUIRE_SCALAR | FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH]],
'lastName' => ['filter' => FILTER_SANITIZE_STRING,
'flags' => [FILTER_REQUIRE_SCALAR | FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH]],
];
Run Code Online (Sandbox Code Playgroud)
一次只使用一个标志是使用标志的唯一方法filter_input_array()吗?例如:(写得很远,虽然我可以用循环来做).
$def1 = [
'firstName' => ['filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_REQUIRE_SCALAR],
'lastName' => ['filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_REQUIRE_SCALAR]
];
$def2 …Run Code Online (Sandbox Code Playgroud) PHP 5.3+ 支持匿名函数(尽管在 PHP 7.x+ 中,它对匿名函数的支持在绑定方面略有不同)。我正在运行 PHP 5.6.x
是否有一种语法允许将多个参数传递给用作回调的匿名函数(而不是仅使用数组)。以下哪些示例(如果有)可以在 PHP 中实现?
实施例1
function ($str1, $str2 ){ //But, that would be too easy, right?
return $str1 . $str2;
}
Run Code Online (Sandbox Code Playgroud)
实施例2
function () use ($string, $min, $max) { // Not seeing this in the manual.
$length = mb_strlen($string, 'UTF-8');
return ($length >= $min) && ($length <= $max);
}
Run Code Online (Sandbox Code Playgroud)
实施例3
只是出于好奇,这种形式可能吗?
function ($str1, $str2 ) use ($int1, $int2) { // But, that would be in the …Run Code Online (Sandbox Code Playgroud) 其实类似的问题还有很多,我也解决不了这个问题。我正在使用 codeigniter 框架。当我insert通过传递 php 对象来调用 ActiveRecord 的方法时,它会按其值或 null 发送所有属性。它会导致cannot be null.错误。
表结构:
CREATE TABLE `scheduledTasks` (
`id` int(11) NOT NULL,
`type` varchar(255) COLLATE utf8_bin NOT NULL,
`createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`executionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ownerUserId` int(11) DEFAULT NULL,
`subjectUserId` text COLLATE utf8_bin,
`detail` text COLLATE utf8_bin,
`isExecuted` int(1) DEFAULT '0'
);
ALTER TABLE `scheduledTasks`
ADD PRIMARY KEY (`id`);
ALTER TABLE `scheduledTasks`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
我尝试过的查询:
INSERT INTO `scheduledTasks` (`id`, …Run Code Online (Sandbox Code Playgroud) 我使用Zend框架和Doctrine.在许多项目中,业务逻辑内置于控制器中.这种方法对我来说似乎不对.
我见过的最好的设置是使用服务层,这就是编写业务逻辑的地方.我所要做的就是创建一个表单,验证它,并在服务层中使用一些业务逻辑.结果验证,业务逻辑和使用一种方法(例如:newProduct($ postData)).
在MVC中组织业务逻辑的正确方法是什么?也许我需要阅读一些书籍,或者看一些源代码示例.
php ×4
activerecord ×1
callback ×1
datetime ×1
encryption ×1
events ×1
javascript ×1
mcrypt ×1
mysql ×1
sql ×1
symfony1 ×1
this ×1
utf-8 ×1