Hỏi về ký hiệu/ toán tử/ từ khóa '@' trong PHP

Mình muốn hỏi về kí hiệu @ trong PHP (Xin lỗi mình ko biết gọi thế nào cho đúng). Tác dụng là gì và sử dụng khi nào. Thình thoảng mình vẫn thấy sử dụng và thấy rất lạ. Cám ơn :slight_smile:
VD:

<?php
/**
 * mysqli extension Class dictionary for PHP_CompatInfo 1.9.0a1 or better
 *
 * PHP versions 4 and 5
 *
 * @category PHP
 * @package  PHP_CompatInfo
 * @author   Davey Shafik <[email protected]>
 * @author   Laurent Laville <[email protected]>
 * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
 * @version  CVS: $Id: mysqli_class_array.php,v 1.1 2008/12/13 16:52:35 farell Exp $
 * @link     http://pear.php.net/package/PHP_CompatInfo
 * @since    version 1.9.0a1 (2008-11-23)
 */
?>

Hello

Cái này gọi là Annotations, nếu muốn thì có thể seach trên ggogle nếu làm FW php thì hầu hết nó support

Fox example:

<?php

use Phalcon\Mvc\Model;

class Robots extends Model
{
    /**
     * @Primary
     * @Identity
     * @Column(type="integer", nullable=false)
     */
    public $id;

    /**
     * @Column(type="string", length=70, nullable=false)
     */
    public $name;

    /**
     * @Column(type="string", length=32, nullable=false)
     */
    public $type;

    /**
     * @Column(type="integer", nullable=false)
     */
    public $year;
}
1 Like

Cái ví dụ bạn đưa nó là Annotation, viết trong dockblock, được dùng bởi framework (VD như framework Phalcon ở trên), hoặc các thư viện như phpDocumentor để sinh ra document (tài liệu về api, class, method…) tự động.

Còn nếu nó được đặt trước tên hàm khi gọi hàm, VD:

$a = @my_func(); // Nếu có lỗi => bỏ qua, vẫn chạy tiếp

hoặc dùng với các biểu thức

$a = @$array[$key]; // => không báo lỗi nếu $key không tồn tại trong array

thì nó là Error Control Operators, nó hoạt động giống try...catch, tự động catch lỗi và loại bỏ message lỗi. Tuy nhiên cái này là bad pratices, tránh sử dụng, vì nó loại bỏ hết message lỗi nên khó debug, không biết lỗi phát sinh ở đâu.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?