2015-11-01 11 views
6

Tôi luôn cố gắng sử dụng từ khóa var khi bên trong các hàm sử dụng CF, nhưng có lẽ một câu hỏi ngu ngốc mà tôi có, bạn có thường xuyên sử dụng nó không?từ khóa var trong coldfusion và bao nhiêu lần để sử dụng nó

Ví dụ:

<cfset var local = ""> <!-- set at the top of the function --> 

<!-- then later in the function --> 
<cfset var local.firstname = "steve"> 
<cfset var local.lastname = "smith"> 
<cfset var local.email = "[email protected]"> 

là nó là một trường hợp mỗi khi bạn viết một biến, bạn phải thiết lập các từ khóa, hay chỉ là trường hợp đầu tiên của nó khi được sử dụng trong một hàm?

Hoặc là nó chỉ giống như

<cfset var local = ""> <!-- set at the top of the function --> 

<!-- then later in the function --> 
<cfset local.firstname = "steve"> 
<cfset local.lastname = "smith"> 
<cfset local.email = "[email protected]"> 

Trả lời

3

Bạn không cần phải sử dụng từ khoá 'var' cho các biến có trong phạm vi 'địa phương'. Vì 'cục bộ' là cấu trúc tất cả các thành viên của nó là một phần của cùng một phạm vi.

Về cơ bản, cấu trúc 'cục bộ' chỉ là một vùng chứa để giữ tất cả các biến phải nằm trong phạm vi địa phương của hàm.

UPDATE: AS của CF9 local là một phạm vi rõ ràng mà bạn sử dụng để giữ chức năng của bạn scoped biến, mà không cần khai báo nó. Thông thường tôi gõ nó chữ hoa nhưng đó là một vấn đề của hương vị.

<cfset LOCAL.firstname = "steve"> 
<cfset LOCAL.lastname = "smith"> 
<cfset LOCAL.email = "[email protected]"> 

Trong Coldfusion 8 và trước khi bạn thường sẽ định nghĩa một struct local ở đầu hàm của bạn:

<cfset var LOCAL = structNew() /> 

Tuy nhiên bạn có thể chọn bất kỳ tên khác cho struct đó.

+1

tôi nghi ngờ họ đang xem xét mã cũ mà sử dụng 'var local = ... 'thay cho một phạm vi ĐỊA PHƯƠNG chính thức (được giới thiệu vào CF9 +) . * Vì vậy, ví dụ thứ hai của bạn là tốt. * Thực ra ví dụ thứ hai không hợp lệ trong CF11. LOCAL là phạm vi chính thức (tức là cấu trúc). Cố gắng ghi đè cấu trúc hệ thống đó bằng một chuỗi rỗng sẽ gây ra lỗi. – Leigh

5

Bạn đang sử dụng phiên bản ColdFusion nào? Vì ColdFusion 9 local là một phạm vi, do đó, không có điểm cụ thể trong việc tạo ra nó.

Để trả lời câu hỏi của bạn: tất cả các biến chức năng cục bộ cần được chủ động tạo cục bộ cho hàm. ColdFusion không tự động làm điều này.

Có hai cách để thực hiện việc này. Qua var keyword:

var someVar = someValue; 

Hoặc qua phạm vi local:

local.someVar = someValue; 

Bạn đang lúng túng trong ví dụ của bạn như những gì một biến là. Được cung cấp mã này:

var myStruct = {}; 
myStruct.someKey = "some value"; 

Trong biến số này myStruct là biến số. myStruct.someKey không phải là biến riêng biệt, nó chỉ là khóa con của biến số myStruct. Vì vậy, điều này không có ý nghĩa:

var myStruct = {}; 
var myStruct.someKey = "some value"; 
0

Nếu bạn không sử dụng phạm vi địa phương, bạn chỉ phải sử dụng từ khóa var một lần cho mỗi biến.

Tôi đã được giới thiệu với các chức năng do người dùng xác định với phiên bản 7.1.Tôi không chắc chắn về các phiên bản khác, nhưng trong phiên bản đó, bạn phải var tất cả các biến của mình ngay sau thẻ cfargument, trước khi bất kỳ lệnh nào khác được thực thi. Nói cách khác, điều này là ok.

<cffunction etc> 
<cfargument name = "arg1"> 
<cfset var x = 0> 
<cfquery> 
sql goes here 
</cfquery> 
<cfset x = 3> 

nhưng điều này sẽ ném ra một lỗi:

<cffunction etc> 
<cfargument name = "arg1"> 

<cfquery> 
sql goes here 
</cfquery> 
<cfset var x = 3> 
Các vấn đề liên quan