01/10/2018, 09:12

Hỏi về ký hiệu hay toán tử hay từ khóa '@' trong PHP (Xin lỗi mình ko biết gọi thế nào cho đúng)

Cho mình hỏi chút về kí hiệu @ trong PHP. 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
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 <davey@php.net>
 * @author   Laurent Laville <pear@laurent-laville.org>
 * @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)
 */
?>
Duy Thien viết 11:28 ngày 01/10/2018

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;
}
Ice Tea viết 11:23 ngày 01/10/2018

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.

Bài liên quan
0