Uiza

DISCUSSIONS

Jul 7th, 2018 3:37 AM

Xin chào, Hiện tại em làm đến bước tạo sitemap "php artisan sitemap:create" thì bị lỗi "There are no commands defined in the "sitemap" namespace" làm sao để khắc phục ạ?.

0
Jul 7th, 2018 3:32 AM

Bài viết rất hay và chi tiết 👍

Anh có vài góp ý nhỏ cho em, hy vọng có thể giúp em nâng cao chất lượng bài viết hơn 😄

Chỉ chứa những method/properties trống không có thực thi.

Cái này em nên nói rõ là với ngôn ngữ em đang sử dụng trong bài viết, là csharp, hay có thể là PHP nữa. Còn với Java thì khá là dị, theo anh được biết thì từ Java 8, trong Interface người ta cũng có thể khai báo function body =)) https://viblo.asia/p/interface-trong-java-8-gioi-thieu-default-method-va-static-method-PDOkqLqjejx

Các lớp có thể kế thừa nhiều interface.

Không nên nói class kế thừa interface. Em nên dùng nguyên từ tiếng anh là implements thì hay hơn. Kế thừa chỉ nên dùng cho class mà thôi

Ngoài ra, khi nói về Abtract Class với Interface, người ta hay có một ví von nữa là: khi extend một abtract class, thì có nghĩa là ta đang thể hiện mối quan hệ is-a (), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (, hay thực hiện).

Ngày trước code còn hay có convention thêm tiền tố I ở trước tên Interface để thể hiện đó là một Interface, nhưng anh thấy gần đây họ cũng bỏ nhiều rồi, không rõ trong CSharp vẫn giữ quan điểm đó hay sao 🤔 Mọi người thường đặt tên Interface sao cho có thể thể hiện đúng bản chất của nó theo mối quan hệ đã thể hiện hơn trên.

Ví dụ như

class Programmer extends Human implements Programming, Debugging 
{
}

chẳng hạn. Đọc sẽ hiểu là

Programmer Human, thực hiện việc Programming, Debugging

😄

P/S: Một câu hỏi nhỏ: một class có thể implements được nhiều Interface, vậy theo em nếu trong 2 Interface mà cùng được class A implements, có cùng một function tên là a() thì sao nhỉ? 😄

+3
Jul 7th, 2018 1:54 AM

Tai sao zsh cua em no co tieng Trung Quoc vay? Em mac phai van de nua la command gedit ~/.zshrc no khong chay duoc 😦 Screenshot from 2018-07-07 08-54-06.png

0
Jul 7th, 2018 1:46 AM

rất chi tiết, thank bạn

0
Jul 6th, 2018 4:37 PM

bạn dùng ide gì để code mà đẹp vậy

0
Jul 6th, 2018 1:21 PM

PHP docs: https://secure.php.net/manual/en/language.oop5.traits.php#language.oop5.traits.precedence

An inherited member from a base class is overridden by a member inserted by a Trait. The precedence order is that members from the current class override Trait methods, which in turn override inherited methods.

=> Thứ tự ưu tiên sẽ là: method của class hiện tại > (override) method của Trait > method từ class cha

Bạn có thể hình dung là khi class sử dụng 1 trait thì khi chạy, PHP sẽ copy nội dung của trait vào class, nếu có 2 method trùng tên thì nó sẽ giữ lại method của class và không copy method đó của trait vào nữa. Trường hợp không có method nào trùng tên thì PHP sẽ copy tất cả nội dung của trait vào, trở thành một phần của class và tất nhiên nó sẽ override lại các method của lớp cha.

+3
Jul 6th, 2018 10:51 AM

không dịch à b

0
Jul 6th, 2018 9:48 AM

Hình như việc ảnh hưởng SEO ko còn nữa do đã được render ra html trước khi trả về client rồi thì phải

0
Jul 6th, 2018 9:42 AM

updated bạn nhé

0
Jul 6th, 2018 9:27 AM

chị chăm quá ❤️

+1
Jul 6th, 2018 8:13 AM

Vậy làm sao để xóa

0
Jul 6th, 2018 8:05 AM

Hay quá, cảm ơn bạn nhiều

+1
Jul 6th, 2018 8:02 AM

@huusu1996 thì ý là nó vẫn cho override thôi, kiểu cố để sửa thì ai quản lý được đâu em (khoc)

+1
Jul 6th, 2018 8:00 AM

@buihieubthc2rb Em nghĩ không ai overide trong Trait cả. Việc sinh ra thằng Trait để tránh kế thừa phức tạp nhiều tầng lớp trong những ngôn ngữ đơn kế thừa (như PHP) thôi.

+1
Jul 6th, 2018 7:56 AM

không hỏi nguồn gốc của keyword trait do ai nghĩ ra à Ngọc =)))

+2
Let's register a Viblo Account to get more interesting posts.