我正在尝试自动化更新 AWS Lambda 层和使用它们的函数的过程。为了获取使用特定层的函数列表,我在我的账户中列出当前函数时解析 AWS CLI 的 JSON 输出。调用aws lambda list-functions返回一个类似于下例的 JSON 块(我特意去掉了一些不相关的内容来关注这个问题):
{
"Functions": [
{
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-1"
},
{
"Layers": [
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
}
],
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-2"
},
{
"Layers": [
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
},
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer2:5"
}
],
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-3"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我定义了三个函数,其中两个至少使用了一层。我需要做的是获取FunctionArn使用特定层的函数的值列表。到目前为止,我已经能够使用以下命令过滤掉不使用任何图层的函数:
aws lambda list-functions | jq '.Functions[] …Run Code Online (Sandbox Code Playgroud) 我有一个IF语句,它包含两个单独的函数调用,将值传递给两个变量.显然,如果两个值都不是'FALSE',则执行代码块:
<?php
class MyValidater {
static function validateString($string) {
if (preg_match("/[A-Za-z]+/", $string)) {
return $string;
} else {
return false;
}
}
}
$firstName = "Daniel";
$surname = "Simmons";
// Dodgy IF statement
if ($first = MyValidater::validateString($firstName) && $second = MyValidater::validateString($surname)) {
print("Success: $first $second");
} else {
print("Fail: $first $second");
}
?>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,$ first和$ second变量应该包含在静态方法validateString成功验证后的$ firstName和$ surname中保存的值.
但是,两个变量的值最终结束:$ first ='1'和$ second ="Simmons".
'1'应该是"Daniel",但由于某种原因,$ first传递的值为'1'或TRUE.如果你交换两个赋值语句,以便首先计算$ second,那么你最终会得到与之前相反的结果.$ second ='1'和$ first ="Daniel"
任何人都可以解释为什么从类方法返回的字符串值"Daniel"只被改为条件语句的第一部分的int'1'?我通过PHP文档快速查看但无法找到解释.
目前,解决方法是将静态方法的返回值更改为true/false,然后在成功时使$ first = $ firstName等等.但这涉及更多的代码,我宁愿找出为什么这种方式不起作用.