小编Ant*_*dge的帖子

使用JavaScript原型对象时,事件方法中的"this"关键字

我试图在事件处理程序中使用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"对象访问事件方法中的成员变量.这似乎不适用于原型代码.还有另一种方法来实现这一目标吗?

谢谢.

javascript events this

12
推荐指数
3
解决办法
2万
查看次数

PHP:警告mcrypt_generic_init():Iv大小不正确; 供应长度:12,需要:8

基本事实:

$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)

php encryption utf-8 mcrypt

7
推荐指数
1
解决办法
1433
查看次数

PHP 5.4:我可以使用filter_var_array()将多个标志与过滤器一起使用吗?

PHP手册:filter_var_array()

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

6
推荐指数
1
解决办法
2287
查看次数

如何在 PHP 中将多个参数传递给匿名函数?

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)

php callback anonymous-function

5
推荐指数
1
解决办法
5837
查看次数

MySQL:INSERT 错误“不能为 NULL”——DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

其实类似的问题还有很多,我也解决不了这个问题。我正在使用 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)

mysql sql activerecord datetime

5
推荐指数
1
解决办法
2万
查看次数

MVC模式中的业务逻辑在哪里?

我使用Zend框架和Doctrine.在许多项目中,业务逻辑内置于控制器中.这种方法对我来说似乎不对.

我见过的最好的设置是使用服务层,这就是编写业务逻辑的地方.我所要做的就是创建一个表单,验证它,并在服务层中使用一些业务逻辑.结果验证,业务逻辑和使用一种方法(例如:newProduct($ postData)).

在MVC中组织业务逻辑的正确方法是什么?也许我需要阅读一些书籍,或者看一些源代码示例.

php model-view-controller symfony1 zend-framework

3
推荐指数
2
解决办法
5560
查看次数