标签: eval

PHP:给定一个类名,如何返回一个实例化的类对象?

他们说eval()是邪恶的.我想避免使用适当的PHP5功能使用eval()行.给定静态类方法中的类名,如何使其返回真实对象?

class Model {
  public static function loadModel($sModelPath) {
    if (!(strpos(' ' . $sModelPath, '/')>0)) {
      $sModelPath .= '/' . $sModelPath;
    }
    $sModelName = str_replace('/','_',$sModelPath);
    // P is a global var for physical path of the website
    require_once(P . '_models/' . $sModelPath . '.php');
    eval("\$oObject = new $sModelName" . '();');
    return $oObject;
  }
}
Run Code Online (Sandbox Code Playgroud)

php oop static eval class

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

IE8 Json问题

我面临一个非常奇怪的问题,我从django驱动的站点获取JSON对象并使用eval()将其排除.除了所有版本的IE之外,它适用于所有其他浏览器.在IE中,我得到"variable_name"是null或不是对象.我尽我所能,但到目前为止还没有运气.

这是我的json对象

var results = {"result":[
{
    "artist":"somevalue",
    "song":"someothervalue",
    "file":"filepathvalue",
    "views":"0",
    "songid":"1007",
    "artistimage":"default.jpg"
},

{
    "artist":"artistname",
    "song":"songname",
    "file":"anotherfilepath value",
    "views":"0",
    "songid":"1008",
    "artistimage":"default.jpg"
},
],
"prev_page": "0",
"next_page": "2"
}; 
Run Code Online (Sandbox Code Playgroud)

注意:

alert(results.result[0].song)
Run Code Online (Sandbox Code Playgroud)

工作得很好,但是

$('#somediv').html('<span>'+results.result[0].song+'</span>');
Run Code Online (Sandbox Code Playgroud)

在IE中不起作用.任何的想法?

javascript django jquery json eval

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

eval中的函数定义

我尝试用变量名定义一个函数.

从数据库中检索名称.对于每个名称,我想定义一个按钮并具有单独的处理:

title=['BNL','CE']
for i in range(0,len(title)):
    panelvpu.add(Button(title[i]))


for i in range(0,len(title)):
    eval('def onButtonClick'+title[i]+'(self, event):')
    eval('    Window.alert("Yes")')
Run Code Online (Sandbox Code Playgroud)

按钮定义没问题,但在定义的函数中处理事件会产生错误

im1 SyntaxError: at index 4 in "def onMenu1Item1(self): 
Window.alert("Item 1 selected")": expected ';', got 'onMenu1Item1'
Run Code Online (Sandbox Code Playgroud)

在反馈之后我改变了这个

    title=['BNL','CE']
    for t in title : panelvpu.add(Button(t))

for t in title:        
    def_code = "print t"
    exec(def_code)
Run Code Online (Sandbox Code Playgroud)

只是为了感受; 在python下这很好用.但我使用睡衣,最后一个代码确实是错误说明

 im1 TypeError: iter is undefined
Run Code Online (Sandbox Code Playgroud)

看来睡衣还不支持eval()和exec().

理查德

python eval pyjamas

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

在MATLAB代码中使用eval('expression')的含义和含义?

我在matlab中的其他人的代码中遇到了函数eval(表达式)的使用:例如:

for n = 1 : 4
sn = int2str( n) ;
eval( [ 'saveas( fig'  sn  ', [ sName' sn ' ], ''fig'' ) ' ] );
end
Run Code Online (Sandbox Code Playgroud)

Matlab帮助中MathWorks的东西指出:

eval函数的许多常见用法效率较低,并且比其他MATLAB函数和语言结构更难以阅读和调试.

在此之后,我发现在许多其他程序语言中使用此函数,如Python,JavaScript,PHP.

所以我有几个问题:

  1. 这个函数的使用是否会影响我的代码的性能?
  2. 如果它会减慢执行速度,为什么会发生?
  3. 如果每次调用时都会减慢执行速度,原则上使用此功能的原因是什么?

matlab eval

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

Eval不起作用 - JavaScript

我以前从未使用eval()过,所以我认为我的语法非常错误.以下是什么问题:

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}';
var JSONAsObject = eval(JSONString);
alert(JSONAsObject.item1);
Run Code Online (Sandbox Code Playgroud)

因为它似乎不起作用 - 我加载页面没有任何反应.

是的,我知道我不应该使用eval.我假设语法JSON.parse()与eval 的语法相同......对吗?如果是,如果(在修复代码之后)我用ESON.parse替换eval,它还会做同样的事情吗?

javascript json eval

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

在jQuery中是否有等效的eval()?

我试图在jQuery中创建动态变量.我尝试使用eval()它似乎工作正常,但我不认为eval()是一个jQuery函数.eval()jQuery中是否存在等价?在这里查看我的代码:http://jsfiddle.net/3CXgy/

var test = function(pos) {
    alert(eval('COUNT_'+pos));
}

var COUNT_LEFT = 20;
var COUNT_RIGHT = 30;
test('LEFT');
test('RIGHT');
Run Code Online (Sandbox Code Playgroud)

除了使用之外,还有不同的方法eval()吗?我不确定eval()在上面的例子中是否完全没问题.

jquery eval

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

Perl如何捕获一次抛出的两个异常

我正在解析一个大的EMBL文件(> 1G)并将其转换为gff文件.它有一些条目与传统的embl形成不匹配,因此导致bioperl模块抛出异常.我的问题是,因为有错误的条目只是整个序列的一小部分,我想继续编写脚本,暂时忽略该异常.但perl脚本始终由异常停止.

我在Linux操作系统下,使用perl版本5.8.8

我的perl脚本

use strict;
use Bio::SeqIO;
use Bio::Tools::GFF;
use warnings;
use Try::Tiny;

open (E ,">","emblError.txt");

if (@ARGV != 1) {    die "USAGE: embl2gff.pl   > outputfile.\n"; }

my $in = Bio::SeqIO->new(-file=>$ARGV[0],-format=>'EMBL');
eval {
   while (my $seq = $in->next_seq) {
      for my $feat ($seq->top_SeqFeatures) {
          my $gffio = Bio::Tools::GFF->new(-gff_version => 3);
          print $feat->gff_string($gffio)."\n";
        }
    }
};
if ($@) {
    warn "Oh no! [$@]\n";
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误

Name "main::E" used only once: possible typo at embl2GFF3.pl line 7.

--------------------- WARNING ---------------------
MSG: …
Run Code Online (Sandbox Code Playgroud)

perl eval exception bioperl

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

替代使用eval()

我听过很多关于eval函数"邪恶"甚至"误解"的谣言,所以我决定将它从我的代码中删除.问题是我不知道用什么来代替它.

这是我当前代码的快速概述.我在开头声明了一系列数组(下面的例子只有2个),然后基于按钮单击其中一个被加载到传递给函数的变量中.

这是一些基本的HTML

<div class="button" data-name="button1">Button1</div>
<div class="button" data-name="button2">Button2</div>
Run Code Online (Sandbox Code Playgroud)

和JS(用jQuery)

var butName = null;
var eArray = null;
var button1Logo = ["..path/to/pic1.png","..path/to/pic2.png"];
var button2Logo = ["..path/to/pic3.png","..path/to/pic4.png"];

    $(".button").mouseup(function(){
            /*give a butName*/
            butName = $(this).attr("data-name");

            /*give the array from the button*/
            eArray = eval(butName + "Logo");
    });
Run Code Online (Sandbox Code Playgroud)

这样做会将数组分配给变量而不仅仅是一个表示"butnameLogo"的字符串,这就是我使用eval的原因.但我希望摆脱这种局面.

我知道我可以为html添加一个新属性,只是为变量检索它,但是当我可以用JS做的时候我不想添加更多的html.

我还尝试使用加载到其中的字符串创建一个对象,如下面的答案所示:https://stackoverflow.com/a/16038097/1621380 但这又导致了一个字符串,而不是分配变量.

想知道你是否聪明的人有更好的建议!

javascript arrays jquery eval

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

AngularJS在chrome扩展中使用eval

Laular AngularJS(1.3 beta 19)使用eval.这在铬镀铬中是禁止的.

如何解决问题而不允许进行贬值

错误信息:

拒绝将字符串评估为JavaScript,因为"unsafe-eval"不是以下内容安全策略指令中允许的脚本源:"script-src'self'chrome-extension-resource:".

堆栈跟踪:

angular.js:1011
csp angular.js:1011
(anonymous function) angular.js:23556
Run Code Online (Sandbox Code Playgroud)

更新:请参阅https://docs.angularjs.org/api/ng/directive/ngCsp的文档ng-csp

OUTDATED:看起来AngularJS无法在chrome扩展中检测到CSP.使用显式ng-csp.链接到AngularJS问题:https://github.com/angular/angular.js/issues/8777

eval google-chrome-extension angularjs

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

javascript eval()方法在过滤时会降低性能

我正在从一系列过滤器创建一个where子句的字符串.

var where_clause_string = "(((true && ['SACRAMENTO','CITRUS HEIGHTS'].indexOf(raw_data[i]['city']) > -1) || (false && [].indexOf(raw_data[i]['city']) === -1)) || false)";
var raw_data_length = raw_data.length
  , filtered_data = [];
for(var i = 0; i < raw_data_length; i++) {
  if (eval(where_clause_string)) {
    filtered_data.push(raw_data[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我迭代数据,这是一个对象数组,只返回通过真值测试的对象.

它给出了预期的结果,但性能却被搞砸了.过滤仅1500行需要约2-3秒.如果在不使用eval()的情况下对条件进行硬编码,则该过程非常快.

实现这一目标的替代方法是什么?

javascript performance eval

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