Hướng dẫn php underscore before function name - dấu gạch dưới php trước tên hàm

Trong khi xem xét các thư viện PHP khác nhau, tôi nhận thấy rằng rất nhiều người chọn tiền tố một số phương thức lớp với một dấu gạch dưới, chẳng hạn như

public function _foo()

...thay vì...

public function foo()

Tôi nhận ra rằng cuối cùng điều này thuộc về sở thích cá nhân, nhưng tôi đã tự hỏi liệu có ai có cái nhìn sâu sắc về thói quen này đến từ đâu không.

Tôi nghĩ rằng nó có thể được chuyển từ Php 4, trước khi các phương thức lớp có thể được đánh dấu là được bảo vệ hoặc riêng tư, như một cách ngụ ý "đừng gọi phương pháp này từ bên ngoài lớp". Tuy nhiên, tôi cũng nhận ra rằng có lẽ nó bắt nguồn từ đâu đó (một ngôn ngữ) tôi không quen thuộc hoặc có thể có lý do chính đáng đằng sau nó mà tôi sẽ được hưởng lợi từ việc biết.

Bất kỳ suy nghĩ, hiểu biết và/hoặc ý kiến ​​sẽ được đánh giá cao.

Hướng dẫn php underscore before function name - dấu gạch dưới php trước tên hàm

Neel

8545 Huy hiệu bạc7 Huy hiệu Đồng5 silver badges7 bronze badges

hỏi ngày 19 tháng 3 năm 2009 lúc 18:04Mar 19, 2009 at 18:04

1

Đó là từ những ngày xưa tồi tệ của PHP định hướng đối tượng (PHP 4). Việc triển khai OO khá tệ và không bao gồm những thứ như phương thức riêng tư. Để bù đắp, các nhà phát triển PHP được đặt trước các phương pháp được dự định là riêng tư với một dấu gạch dưới. Trong một số lớp học cũ, bạn sẽ thấy /**private*/ __foo() { để cho nó thêm một số trọng lượng.

Tôi chưa bao giờ nghe nói về các nhà phát triển mở đầu tất cả các phương pháp của họ với dấu gạch dưới, vì vậy tôi không thể bắt đầu giải thích những nguyên nhân đó.

Đã trả lời ngày 19 tháng 3 năm 2009 lúc 18:08Mar 19, 2009 at 18:08

Jeremy DeGrootjeremy DeGrootJeremy DeGroot

4.4062 Huy hiệu vàng20 Huy hiệu bạc21 Huy hiệu đồng2 gold badges20 silver badges21 bronze badges

5

Tôi tin rằng nguồn có thẩm quyền nhất cho các loại quy ước cho PHP ngay bây giờ sẽ là PSR-2: Hướng dẫn kiểu mã hóa vì khung Zend là một phần của PSR:

Tên tài sản không nên được đặt trước với một dấu gạch dưới để biểu thị khả năng hiển thị được bảo vệ hoặc riêng tư.

Tobske

5083 Huy hiệu bạc12 Huy hiệu Đồng3 silver badges12 bronze badges

Đã trả lời ngày 12 tháng 6 năm 2009 lúc 3:19Jun 12, 2009 at 3:19

Joedevonjoedevonjoedevon

2.6393 huy hiệu vàng28 Huy hiệu bạc43 Huy hiệu đồng3 gold badges28 silver badges43 bronze badges

5

Tôi đã mạnh mẽ chống lại các phương thức riêng tư/được bảo vệ bằng cách nhấn mạnh vì bạn có thể sử dụng từ khóa riêng tư/được bảo vệ cho điều đó và IDE sẽ đánh dấu nó cho bạn.

Và tôi vẫn là, nhưng, tôi đã tìm thấy một lý do tại sao nó có thể là một thực hành tốt. Hãy tưởng tượng rằng bạn có phương pháp công khai addFoo() và bên trong phương pháp đó, bạn có một phần nhiệm vụ phổ biến với các phương pháp khác addFooWhenBar(), ________ 9 ... Bây giờ, tên tốt nhất cho phương pháp phổ biến đó sẽ là addFoo(), nhưng nó đã được thực hiện, vì vậy bạn phải Hãy đến với một số tên xấu xí như

public function foo()
1 hoặc
public function foo()
2 hoặc ... nhưng phương thức riêng tư
public function foo()
3 có vẻ như là phương pháp tốt nhất.

Đã trả lời ngày 9 tháng 4 năm 2012 lúc 9:22Apr 9, 2012 at 9:22

Umpirskyumpirskyumpirsky

9.76213 Huy hiệu vàng71 Huy hiệu bạc95 Huy hiệu Đồng13 gold badges71 silver badges95 bronze badges

1

Dấu gạch dưới thường được sử dụng cho các thuộc tính và phương pháp tư nhân. Không phải là một kỹ thuật mà tôi thường sử dụng, nhưng vẫn còn phổ biến trong số một số lập trình viên.generally used for private properties and methods. Not a technique that I usually employ, but does remain popular among some programmers.

Đã trả lời ngày 19 tháng 3 năm 2009 lúc 18:07Mar 19, 2009 at 18:07

Jonstjohnjonstjohnjonstjohn

58.9K8 Huy hiệu vàng42 Huy hiệu bạc55 Huy hiệu đồng8 gold badges42 silver badges55 bronze badges

Tôi sử dụng một dấu gạch dưới hàng đầu trong lớp Php 5 tôi viết cho các phương thức riêng tư. Đó là một gợi ý trực quan nhỏ cho nhà phát triển rằng một thành viên lớp cụ thể là riêng tư. Loại gợi ý này không hữu ích khi sử dụng IDE phân biệt các thành viên công cộng và tư nhân cho bạn. Tôi đã nhặt nó từ ngày C của tôi. Thói quen cũ ...

Đã trả lời ngày 20 tháng 3 năm 2009 lúc 16:42Mar 20, 2009 at 16:42

GloryfishgloryfishGloryFish

12.8K16 Huy hiệu vàng52 Huy hiệu bạc43 Huy hiệu đồng16 gold badges52 silver badges43 bronze badges

Tôi đã tìm kiếm cùng một câu trả lời, tôi đã thực hiện một số nghiên cứu và tôi vừa phát hiện ra rằng các khung PHP gợi ý các phong cách khác nhau:

Mã hóa

Hướng dẫn chính thức có phần kiểu mã hóa khuyến khích thực hành này:

Phương pháp và biến riêng tư

Các phương thức và biến chỉ được truy cập trong nội bộ, chẳng hạn như các hàm tiện ích và trợ giúp mà các phương thức công khai của bạn sử dụng để trừu tượng hóa mã, nên được đặt trước với một dấu gạch dưới.

public function convert_text()

private function _convert_text()

Các khung khác cũng làm như vậy, như

Cakephp:

làm như vậy:

Khả năng hiển thị thành viên

Sử dụng các từ khóa riêng và được bảo vệ của PHP5 cho các phương thức và biến. Ngoài ra, phương pháp không công khai hoặc tên biến bắt đầu với một dấu gạch dưới (_). Thí dụ:

class A
{
    protected $_iAmAProtectedVariable;

    protected function _iAmAProtectedMethod()
    {
       /* ... */
    }

    private $_iAmAPrivateVariable;

    private function _iAmAPrivateMethod()
    {
        /* ... */
    }
}

Và cũng vậy

làm như vậy:

Khả năng hiển thị thành viên

$_status    _sort()     _initTree()

Sử dụng các từ khóa riêng và được bảo vệ của PHP5 cho các phương thức và biến. Ngoài ra, phương pháp không công khai hoặc tên biến bắt đầu với một dấu gạch dưới (_). Thí dụ:

Và cũng vậy

  1. Các thành viên lớp tư nhân được đi trước bởi một dấu gạch dưới. Ví dụ:

Trong khi

Drupal

Kiểu mã cảnh báo cụ thể chống lại điều này:

Các thuộc tính và phương thức được bảo vệ hoặc riêng tư không nên sử dụng tiền tố nhấn mạnh.Dec 30, 2016 at 11:32

m.arditom.arditom.ardito

Bản giao hưởng3 silver badges13 bronze badges

0

Mặt khác, tuyên bố:

Đã trả lời ngày 19 tháng 3 năm 2009 lúc 18:07Mar 19, 2009 at 18:07

Quintin Robinsonquintin RobinsonQuintin Robinson

Huy hiệu vàng 80K1414 gold badges123 silver badges132 bronze badges

Tôi biết nó từ Python, trong đó tiền tố các biến của bạn với dấu gạch dưới khiến trình biên dịch dịch một số chuỗi ngẫu nhiên của các chữ cái và số trước tên biến thực tế. Điều này có nghĩa là bất kỳ nỗ lực nào để truy cập biến từ bên ngoài lớp sẽ dẫn đến lỗi "biến không xác định".

Tôi không biết liệu đây có còn là quy ước được sử dụng trong Python không, mặc dù

Đã trả lời ngày 8 tháng 4 năm 2010 lúc 18:52Apr 8, 2010 at 18:52

Trong drupal (một CMS php) có thể được sử dụng để ngăn chặn các móc được gọi là (https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7).

Nếu tôi có một mô -đun gọi là "my_module" và muốn đặt tên cho một hàm my_module_insert, nó sẽ "móc" trên hàm hook_insert. Để ngăn chặn điều đó tôi có thể đổi tên chức năng của mình thành _MY_MODULE_INSERT.

PS cách các móc hoạt động ở Drupal, có thể thực hiện một cái móc do nhầm lẫn, điều này rất xấu.

Đã trả lời ngày 1 tháng 11 năm 2013 lúc 9:16Nov 1, 2013 at 9:16

Mahomahomaho

Phù hiệu đồng 4133 bronze badges

1

Drupal và sử dụng dấu gạch dưới:

Nói một cách chung chung, dấu gạch dưới là đánh dấu đơn giản thực tế là một hàm có thể chỉ được gọi bởi một chức năng cha mẹ liên quan ...

function mymodule_tool($sting="page title"){
    $out ='';
    //do stuff 
    $out  .= _mymodule_tool_decor($sting);
    return $out;
}

function _mymodule_tool_decor($sting){
    return '

'.$string.'

'; }

Tất nhiên, chỉ là một ví dụ đơn giản ...

Hướng dẫn php underscore before function name - dấu gạch dưới php trước tên hàm

John Slegers

43.2K22 Huy hiệu vàng197 Huy hiệu bạc165 Huy hiệu đồng22 gold badges197 silver badges165 bronze badges

Đã trả lời ngày 7 tháng 5 năm 2014 lúc 19:36May 7, 2014 at 19:36

Sử dụng dấu gạch dưới chỉ để ghi nhớ mục đích rằng chúng tôi sẽ không 'sửa đổi biến'/'gọi chức năng' bên ngoài lớp.

Khi chúng tôi khai báo các biến const trong tất cả các chữ hoa để trong khi nhìn thấy tên của biến có thể đoán rằng đó là một biến const. Tương tự biến mà chúng tôi không muốn sửa đổi bên ngoài lớp, chúng tôi tuyên bố nó với dấu gạch dưới cho quy ước của chúng tôi.

Đã trả lời ngày 23 tháng 2 năm 2017 lúc 8:26Feb 23, 2017 at 8:26

1

Điều đó có nghĩa là phương pháp này là riêng tư.

"Tôi nhận ra rằng cuối cùng điều này thuộc về sở thích cá nhân, nhưng tôi đã tự hỏi liệu có ai có cái nhìn sâu sắc về thói quen này đến từ đâu không." - Đó không phải là sở thích cá nhân vì mọi ngôn ngữ hoặc khung đều có tiêu chuẩn mã hóa riêng. Một số tiêu chuẩn mã hóa FW đang bắt đầu các phương thức riêng tư với _ và một số FW không khuyến khích điều đó.

Bạn sử dụng tiêu chuẩn mã hóa của FW trong đó bạn lập trình. Để kiểm tra xem mã của bạn có theo tiêu chuẩn mã hóa hay không, bạn có một công cụ PHP_CodesNiffer: https://github.com/squizlabs/php_codesniffer

Rất hữu ích, phát hiện các lỗi liên quan đến tiêu chuẩn mã hóa.

Đã trả lời ngày 2 tháng 10 lúc 18:26Oct 2 at 18:26

Hướng dẫn php underscore before function name - dấu gạch dưới php trước tên hàm

Tôi có thể sử dụng dấu gạch dưới tên chức năng không?

Bạn không nên bắt đầu các ký hiệu hoặc tên chức năng với dấu gạch dưới cho những tên mà bạn tự tạo.Điều này là để giảm khả năng nhầm lẫn, cùng với cùng tên được sử dụng cho các mục đích khác nhau.Đọc sách giáo khoa ngôn ngữ C, hoặc Hướng dẫn sử dụng trình biên dịch XC, về: Từ khóa và ký hiệu được đặt trước.. This is to reduce the possibility of confusion, by the same name beeing used for different purposes. Read a C language textbook, or XC compiler User Guide, about: Reserved keywords and symbols.

Tên biến có thể bắt đầu với dấu gạch dưới trong PHP?

Một tên biến phải bắt đầu bằng một chữ cái hoặc ký tự dấu gạch dưới.Một tên biến không thể bắt đầu với một số.Một tên biến chỉ có thể chứa các ký tự alpha-numeric và các tên biến (A-Z, 0-9 và _) là nhạy cảm trường hợp ($ Age và $ Age là hai biến khác nhau). A variable name cannot start with a number. A variable name can only contain alpha-numeric characters and underscores (A-z, 0-9, and _ ) Variable names are case-sensitive ( $age and $AGE are two different variables)

Double nhấn mạnh có nghĩa là gì trong PHP?

Nói đúng ra, nó có nghĩa là không có gì trong PHP vì nó không phải là một hàm được xác định trước.Tuy nhiên, trong nhiều khung, như CakePHP và các thư viện khác, dấu gạch dưới là một hàm được sử dụng để dịch các chuỗi dựa trên sở thích ngôn ngữ/ngôn ngữ của người dùng.nothing in PHP as it is not a pre-defined function. However, in many frameworks, like CakePHP, and other libraries the double underscore is a function used for translating strings based on the user's language/locale preference.