Thứ Sáu, 17 tháng 3, 2017

Giới thiệu hàm Eval trong Javascript

Giới thiệu hàm Eval trong Javascript

Hàm eval() đánh giá mã JavaScript được biểu diễn dưới dạng một chuỗi.

Giới thiệu hàm Eval trong Javascript


Cú pháp: 
eval(string)
 Eval () là một thuộc tính chức năng của đối tượng toàn cục.

Đối số của hàm eval() là một chuỗi. Nếu chuỗi biểu diễn một biểu thức, eval () sẽ đánh giá biểu thức. Nếu đối số đại diện cho một hoặc nhiều lệnh JavaScript, eval () đánh giá các câu lệnh. Đừng gọi eval() để đánh giá một biểu thức số học; JavaScript đánh giá các biểu thức số học tự động.

Nếu bạn xây dựng một biểu thức số học như một chuỗi, bạn có thể sử dụng eval() để đánh giá nó sau.
Ví dụ, giả sử bạn có một biến x. Bạn có thể trì hoãn đánh giá một biểu thức liên quan đến x bằng cách gán giá trị chuỗi của biểu thức, nói "3 * x 2", cho một biến, và sau đó gọi eval () vào một điểm sau trong mã Javascript của bạn.

Nếu đối số của eval() không phải là một chuỗi, eval() trả về đối số không thay đổi. Trong ví dụ sau, cấu trúc String được chỉ định, và eval () trả về một đối tượng String thay vì đánh giá chuỗi.

eval(new String('2 + 2')); // returns a String object containing "2 + 2"
eval('2 + 2');             // returns 4
Bạn có thể làm việc xung quanh giới hạn này theo cách chung chung bằng cách sử dụng toString().

var expression = new String('2 + 2');
eval(expression.toString());
Nếu bạn sử dụng chức năng eval gián tiếp, bằng cách viện dẫn nó qua một tài liệu tham khảo khác với eval, như ECMAScript 5 hoạt động ở phạm vi chung hơn là phạm vi riêng; Điều này có nghĩa là, các khai báo chức năng tạo ra các hàm chung, và mã được đánh giá không có quyền truy cập vào các biến cục bộ trong phạm vi mà nó được gọi.


function test() {
  var x = 2, y = 4;
  console.log(eval('x + y'));  // Direct call, uses local scope, result is 6
  var geval = eval;
  console.log(geval('x + y')); // Indirect call, uses global scope, throws ReferenceError because `x` is undefined
}

Không sử dụng eval không cần thiết! 

Eval () là một chức năng nguy hiểm, nó thực hiện mã nó được truyền với các đặc quyền của người gọi. Nếu bạn chạy eval () bằng một chuỗi có thể bị ảnh hưởng bởi một bên độc hại, bạn có thể sẽ chạy mã độc hại trên máy của người dùng với quyền của trang web/tiện ích mở rộng của bạn. Quan trọng hơn, mã của bên thứ ba có thể thấy phạm vi mà trong đó eval () được triệu gọi, điều này có thể dẫn tới các cuộc tấn công có thể xảy ra theo cách mà chức năng tương tự không phải là dễ bị ảnh hưởng.

Eval () thường chậm hơn so với các phương án thay thế vì nó phải gọi trình thông dịch JS, trong khi nhiều cấu trúc khác được tối ưu hóa bởi các động cơ JS hiện đại.

Có những lựa chọn thay thế an toàn hơn (và nhanh hơn) để eval () cho các trường hợp sử dụng phổ biến.

Truy cập thuộc tính thành viên

Bạn không nên sử dụng eval () để chuyển tên thuộc tính thành thuộc tính. Hãy xem xét ví dụ sau đây mà tài sản của đối tượng được truy cập không được biết cho đến khi mã được thực hiện. Điều này có thể được thực hiện với eval:


var obj = { a: 20, b: 30 };
var propName = getPropName();  // returns "a" or "b"

eval( 'var result = obj.' + propName );
Tuy nhiên, eval () không cần thiết ở đây. Trên thực tế, việc sử dụng ở đây không được khuyến khích. Thay vào đó, sử dụng các thuộc tính accessors, nhanh hơn và an toàn hơn nhiều:


var obj = { a: 20, b: 30 };
var propName = getPropName();  // returns "a" or "b"
var result = obj[ propName ];  //  obj[ "a" ] is the same as obj.a
Bạn thậm chí có thể sử dụng phương pháp này để truy cập các thuộc tính hậu duệ. Sử dụng eval () sẽ giống như sau:

var obj = {a: {b: {c: 0}}};
var propPath = getPropPath();  // returns e.g. "a.b.c"

eval( 'var result = obj.' + propPath );
Tránh eval () ở đây có thể được thực hiện bằng cách tách đường dẫn thuộc tính và lặp lại các thuộc tính khác nhau:


function getDescendantProp(obj, desc) {
  var arr = desc.split('.');
  while (arr.length) {
    obj = obj[arr.shift()];
  }
  return obj;
}

var obj = {a: {b: {c: 0}}};
var propPath = getPropPath();  // returns e.g. "a.b.c"
var result = getDescendantProp(obj, propPath);
Thiết lập một thuộc tính tương tự như vậy:


function setDescendantProp(obj, desc, value) {
  var arr = desc.split('.');
  while (arr.length > 1) {
    obj = obj[arr.shift()];
  }
  obj[arr[0]] = value;
}

var obj = {a: {b: {c: 0}}};
var propPath = getPropPath();  // returns e.g. "a.b.c"
var result = setDescendantProp(obj, propPath, 1);  // test.a.b.c will now be 1

Sử dụng các chức năng thay vì đánh giá các đoạn mã

JavaScript có các chức năng hạng nhất, có nghĩa là bạn có thể vượt qua các hàm như các đối số cho các API khác, lưu trữ chúng trong biến và các thuộc tính của các đối tượng, v.v ... Nhiều API DOM được thiết kế với điều này trong tâm trí, do đó bạn có thể (và nên) viết:


// instead of setTimeout(" ... ", 1000) use:
setTimeout(function() { ... }, 1000); 

// instead of elt.setAttribute("onclick", "...") use:
elt.addEventListener('click', function() { ... } , false);
Closures  cũng rất hữu ích như là một cách để tạo ra các tham số mà không cần nối dây.

Phân tách cú pháp JSON (chuyển đổi các chuỗi thành các đối tượng JavaScript)


Nếu chuỗi bạn đang gọi eval () trên chứa dữ liệu (ví dụ: mảng "[1, 2, 3]"), ngược lại với mã, bạn nên xem xét chuyển sang JSON, cho phép chuỗi sử dụng Tập hợp con của cú pháp JavaScript để biểu diễn dữ liệu. Xem thêm Tải về JSON và JavaScript trong phần mở rộng.

Lưu ý rằng vì cú pháp JSON bị hạn chế so với cú pháp JavaScript, nhiều văn bản JavaScript hợp lệ sẽ không phân tích cú pháp là JSON. Ví dụ: dấu phẩy sau không được phép trong JSON và tên thuộc tính (khóa) trong các ký tự đối tượng phải được bao gồm trong dấu ngoặc kép. Đảm bảo sử dụng một trình tạo mã JSON để tạo chuỗi sau đó được phân tích cú pháp dưới dạng JSON.

Truyền dữ liệu thay vì mã


Ví dụ: tiện ích được thiết kế để cạo nội dung của các trang web có thể có các quy tắc cào được xác định trong XPath thay vì mã JavaScript.

Chạy mã với các đặc quyền giới hạn

Nếu bạn phải chạy mã, hãy xem xét chạy nó với các đặc quyền giảm. Lời khuyên này áp dụng chủ yếu cho các ứng dụng mở rộng và XUL, có thể sử dụng Components.utils.evalInSandbox cho việc này.

Ví dụ
Sử dụng eval

Trong đoạn code sau, cả hai câu lệnh chứa eval () trả về 42. Đầu tiên đánh giá chuỗi "x + y + 1"; Phần thứ hai đánh giá chuỗi "42".
var x = 2;
var y = 39;
var z = '42';
eval('x + y + 1'); // returns 42
eval(z);           // returns 42
Sử dụng eval để đánh giá một chuỗi các câu lệnh JavaScript

Ví dụ sau sử dụng eval () để đánh giá chuỗi str. Chuỗi này bao gồm các câu lệnh JavaScript mở hộp thoại cảnh báo và chỉ định z một giá trị là 42 nếu x là năm và gán 0 cho zotherwise. Khi câu lệnh thứ hai được thực hiện, eval () sẽ làm cho các câu lệnh này được thực hiện, và nó cũng sẽ đánh giá tập hợp các câu lệnh và trả về giá trị được gán cho z.
var x = 5;
var str = "if (x == 5) {console.log('z is 42'); z = 42;} else z = 0;";

console.log('z is ', eval(str));
Biểu thức cuối cùng được đánh giá
Eval () trả về giá trị của biểu thức cuối cùng được đánh giá.
var str = 'if ( a ) { 1 + 1; } else { 1 + 2; }';
var a = true;
var b = eval(str);  // returns 2
 
console.log('b is : ' + b);

a = false;
b = eval(str);  // returns 3

console.log('b is : ' + b);
Eval như là một chức năng xác định chuỗi đòi hỏi "(" and ")" như tiền tố và hậu tố



var fctStr1 = 'function a() {}'
var fctStr2 = '(function a() {})'
var fct1 = eval(fctStr1)  // return undefined
var fct2 = eval(fctStr2)  // return a function



출장안마


Thứ Tư, 8 tháng 3, 2017

Cách xuất trang web sang PDF từ PHP

Cách xuất trang web sang PDF từ PHP

Pdfcrowd API là một công cụ trực tuyến cho phép bạn dễ dàng in các trang web và mã HTML sang PDF trong các ứng dụng PHP của bạn. Các tệp PDF được tạo ra trong cloud, không có thư viện của bên thứ ba là cần thiết. Tất cả những gì bạn cần là một thư viện khách hàng PHP API nhỏ gọn.

Mã này chuyển đổi một trang web và gửi tệp PDF được tạo ra dưới dạng phản hồi HTTP:


require 'pdfcrowd.php';
// create an API client instance
$client = new Pdfcrowd("username", "apikey");
// convert a web page and store the generated PDF into a variable
$pdf = $client->convertURI('http://www.google.com/');
// set HTTP response headers
header("Content-Type: application/pdf");
header("Cache-Control: max-age=0");
header("Accept-Ranges: none");
header("Content-Disposition: attachment; filename=\"google_com.pdf\"");
// send the generated PDF
echo $pdf;

Một tùy chọn khác là để chuyển đổi mã HTML thô, chỉ cần sử dụng phương thức convertHtml() thay convertURI():


$pdf = $client->convertHtml("<body>My HTML Layout</body>");

API cho phép bạn chuyển đổi một tệp HTML cục bộ:


$pdf = $client->convertFile("/path/to/MyLayout.html");

File Ví dụ cho việc chuyển đổi TẠI ĐÂY

Chú ý:

- PDF đóng gói một mô tả đầy đủ về tài liệu phẳng bố trí cố định.
- PDF là một tiêu chuẩn nền tảng chéo. Ai đó có thể tạo một tệp PDF trên máy trạm Linux và bạn có thể mở tệp trên PC hoặc Mac và vẫn thấy tài liệu giống như dự định được xem:
- PDF hỗ trợ bảo mật. Xuất bản một tệp PDF có thể đặt các tùy chọn bảo mật khác nhau. Bạn có thể khóa PDF để nó chỉ có thể được mở bằng mật khẩu. Cũng có thể cấm việc thay đổi nội dung của một tệp PDF hoặc vô hiệu hóa tùy chọn để in tệp PDF.

Thứ Ba, 7 tháng 3, 2017

Cấu trúc điều khiển- Control

Cấu trúc điều khiển- Control

Câu lệnh if, elseif…else và switch được lấy để đưa ra các điều kiện cần với các trường hợp khác nhau. Bạn có thể sử dụng câu lệnh điều kiện trong code của bạn để đưa ra những điều kiện xảy ra cho từng trường hợp. cau truc dieu khienPHP hỗ trợ 3 loại câu lệnh sau:
 1. Câu lệnh if…else Sử dụng câu lệnh này nếu bạn muốn thực hiện một bộ mã khi một điều kiện là đúng sự thật. Cú pháp:



Ví dụ :


hoặc 


2. Câu lệnh elseif  được sử dụng với câu lệnh if…else để thực hiện một bộ mã nếu một trong số điều kiện là đúng sự thật. Cú pháp:



Ví dụ 




3. Câu lệnh switch  Sử dụng nếu bạn muốn chọn một trong nhiều khối điều kiện sẽ thực hiện, sử dụng câu lệnh Switch. Các điều kiện sẽ được sử dụng để tránh các khối dài của mã if…elseif…else. Cú pháp:



Bài học : Vòng Lặp Trong PHP

Bài học : Vòng Lặp Trong PHP

PHP hỗ trợ 4 loại vòng lặp sau:
– for : lặp qua một khối mã với số lần được quy định
 – while: vòng lặp thông qua khối lệnh và dừng với một điều kiện được chỉ định.
– do…while: vòng lặp thông qua khối mã một lần, và sau đó lặp lại vòng lặp với một điều kiện
– foreach: vòng lặp thông qua một khối mã cho mỗi phần tử trong một mảng. vong lap trong phpSau đây, các bạn sẽ được biết chi tiết hơn nữa về từ khóa continue và break được sử dụng khi thực thi các vòng lặp. 1. Câu lệnh for Cú pháp:
Ví dụ:  
Kết quả: 

 2. Vòng lặp while Vòng lặp while sẽ được thực thi khi đúng với điều kiện. Nếu biểu thức kiểm tra đúng thì các khối mã sẽ được thực thi. Sau khi mã đã được thực thi, các biểu thức được kiểm tra lần nữa sẽ được đánh giá vòng lặp sẽ cho tiếp tục đến khi kiểm tra biểu thức sai. Cú pháp:
Ví dụ:  
Kết quả:
3. Vòng lặp do…while Vòng lặp được thực thi ít nhất một lần – nó sẽ lặp lại vòng lặp như một điều kiện đúng Cú pháp:
Ví dụ:
Kết quả:
4. Vòng lặp Foreach Vòng lặp được sử dụng lặp cho một mảng. Đối với mỗi giá trị của mảng hiện tại được gán cho $value và con trỏ mảng được di chuyển bởi một và tới phần tử tiếp theo sẽ được xử lý. Cú pháp:
Ví dụ:
Kết quả:
5. Câu lệnh Break Trong PHP câu break được dùng để ngừng thực hiện vòng lặp. Câu break nằm trong khối lệnh. Nếu cung cấp cho bạn toàn quyền kiểm soát và bất cứ khi nào bạn muốn thoát ra khỏi vòng lặp thì bạn có thể ssi. Sau khi ra khỏi một vòng lặp thông điệp sẽ được thực thi. Ví dụ:
Kết quả:
6. Câu lệnh continue  Trong php thì continue được sử dụng để ngăn chặn sự lặp lại hiện tại của một vòng lặp nhưng nó không chấm dứt vòng lặp. Cũng như break, continue nằm trong khối lệnh chứa mã mà vòng lặp thực hiện. Đối với các đường chuyền gặp phải continue, phần còn lại của vòng lặp được bỏ qua và đến phần tiếp theo. Ví dụ:
Kết quả: