logo

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ
No Result
View All Result
logo
No Result
View All Result
Trang chủ mảng object trong php

Mảng object trong php

by Admin _ June 12, 2022
1. Đặt vấn đề

Một ngày đẹp mắt trời bạn tiến hành câu lệnh thân quen thuộc để đưa ra vớ cả phiên bản ghi trong bảng users. Mẩu chuyện hết sức đơn giản và dễ dàng nếu bạn áp dụng Eloquent trong Laravel là xong.

Bạn đang xem: Mảng object trong php

//get all user$users = User::first();Thay bởi trả về một collection model như hàm all(), hàm first() này trả về một model instance.

Để kéo ra thuộc tính name của model instance bên trên cũng dễ dàng thôi. Các bạn dùng câu lệnh

$user->name;// hoặc$user<"name">;Bài toán vẫn được giải quyết và xử lý nhưng đợi một chút, ta bỗng dưng nhận ra mã sản phẩm instance tê vừa gọi theo kiểu object được vừa gọi theo kiểu array được. Vậy nó là object tốt array?

2. Object với array trong PHP

Để xác minh nó là object tuyệt array thì ta đi sang 1 chút về hai có mang này vào PHP.

Array(Mảng) là list các thành phần có thuộc kiểu tài liệu và nó là một trong trong các kiểu tài liệu trong php gồm độ phức tạp giám sát cao. Bao gồm 2 nhiều loại mảng là mảng một chiều hoặc mảng nhiều chiều. Riêng rẽ với PHP thì các phần tử của mảng hoàn toàn có thể không thuộc kiểu dữ liệu, và các thành phần của mảng được truy nã xuất thông qua các chỉ mục(vị trí) của nó phía trong mảng.

Khởi chế tạo và call tới một phần tử vào array gồm rất nhiều cách để đơn giản ta sử dụng cú pháp sau:

$array = <>;$array<"foo"> = "bar";$array<"baz-bar"> = "science"; echo $array<"foo">; //barecho $array->foo; //FailCòn với object câu hỏi khởi tạo và call ra như sau

$object = ;$object->foo = "bar";$object->"baz-bar" = "science" echo $object->foo; //barecho $object<"foo"> // Fail Như tác dụng ta thấy lúc ta điện thoại tư vấn đến nằm trong tính vào object mà áp dụng cú pháp <> sẽ thông tin lỗi ngay. Vậy điều gì đã khiến cho model instance trong laravel có thể sử dụng cả cú pháp hotline của object cùng array ?

3. Mày mò về ArrayAccess

Cùng lấn sân vào phân tích một ít xem Laravel đã làm những gì để biến chuyển một mã sản phẩm instance linh hoạt đến vậy.

Đầu tiên rất có thể thấy mã sản phẩm User extend từ Authenticatable và class đó lại extend model trong thư mục vendor. Túm váy đầm lại là lúc ta điện thoại tư vấn đến User::first() thực tiễn là call hàm first() vào class model trong thư mục IlluminateDatabaseEloquentModel.php. Không, đầy đủ thứ không đơn giản như thế. Chẳng bao gồm hàm first() nào trong mã sản phẩm cả. Nó được hotline thông qua một magic fucntion __callStatic rồi lại gọi đến magic function __call.

public function __call($method, $parameters) if (in_array($method, <"increment", "decrement">)) return $this->$method(...$parameters); return $this->newQuery()->$method(...$parameters); Ở đây một Builder được tạo ra rồi gọi đến $method ở đấy là first. Liên tiếp vào folder Illuminate/Database/Eloquent/Builder.php search vẫn ko thấy hàm first ?? wtf ??

May thừa nhìn chỗ nào class Builder nó có thực hiện Trait với thương hiệu là BuildsQueries mò vào đây ta bắt đầu thấy được hàm first() (metghe).

Chúng ta đừng vội lưu ý đến hàm first vị nó chưa hẳn chìa khóa nhằm trả lời thắc mắc mà đầu bài họ đã nêu ra. Hãy quan sát phần đầu của class mã sản phẩm nó implements ArrayAccess. Nếu như bạn hay phát âm code php thuần thì chắc chắn đã phân biệt vẫn đề nằm ở chỗ này rồi nhỉ?

PHP thuần cung ứng cho ta một số trong những class cùng interfaces được chế tạo sẵn. Những class và interfaces này có thể chấp nhận được nhà cải cách và phát triển PHP thêm những tính năng vào ngôn ngữ, thường xuyên được giành cho những framework.

Xem thêm: ĐIỀU TrỊ Ung Thư Gan Hcc, Tìm Hiểu Về Ung Thư Gan Nguyên Phát

Lên document của php gọi thì ta thấy nó cung ứng cho ta 4 abstract method

abstract public bool offsetExists ( mixed $offset )abstract public mixed offsetGet ( mixed $offset )abstract public void offsetSet ( mixed $offset , mixed $value )abstract public void offsetUnset ( mixed $offset )Vì mã sản phẩm của bọn họ được implements từ bỏ ArrayAccess nên lúc implements sẽ rất cần được
override lại 4 method trên.

Mò xuống code thì chính xác là Laravel đã có tác dụng như vậy. Nhưng điều chúng ta quan trọng tâm ở đây là chuyện gì đã xẩy ra khi bọn họ cố tình hotline thuộc tính của một object theo cú pháp của một array lúc sử dụng model instance của Laravel.

$user<"name">;Khi chúng ta gọi như vậy, bằng 1 cách magic ở trong nhà phát triển, khoác định chúng ta đã điện thoại tư vấn đến abstract method offsetGet. Tôi đã làm debug ra công dụng là như vậy.

Cùng xem hàm này sau thời điểm override lại trường đoản cú ArrayAccess interface đã xử lý gì nhé.

public function offsetGet($offset) return $this->getAttribute($offset);nó truyền vào 1 param khi dump ra các bạn sẽ nhận được giá trị là key của một mảng. Cụ thể ở đây là name. Kiếm tìm tiếp vào hàm getAttribute($offset) xem nó có tác dụng gì.

Tôi vẫn lục tung cả class model ra mà cần yếu tìm thấy hàm getAttribute(). Class mã sản phẩm cũng không extend class làm sao khác, tưởng như đang đi đến đường cụt thì tôi bắt gặp cú pháp này vào phần đầu của class Model

use ConcernsHasAttributes, ConcernsHasEvents, ConcernsHasGlobalScopes, ConcernsHasRelationships, ConcernsHasTimestamps,Không còn nghi vấn gì nữa, mã sản phẩm ở trên đây đã sử dụng Trait (Tìm hiểu về Trait). Kiên trì một chút tôi sẽ tìm thấy hàm getAttribute() trong thư mục IlluminateDatabaseEloquentConcernsHasAttributes.php.

public function getAttribute($key) Ở hàm này xúc tích sẽ lao vào hàm if đồ vật 2 có nghĩa là tồn trên key trùng với attributes

if (array_key_exists($key, $this->attributes) || $this->hasGetMutator($key)) //Nhảy vào chỗ này return $this->getAttributeValue($key); Sau đó điện thoại tư vấn đến những hàm getAttributeValue() và tạm dừng ở hàm getAttributeFromArray().Ở phía trên ta hoàn toàn có thể tìm được giải đáp của câu hỏi ta đề ra ở đầu bài. Nó trả về 1 value của mảng attributes trong model User với key = name rõ ràng là name của bảng users như Nguyễn Văn A chẳng hạn.

/** * Get an attribute from the $attributes array. * *
return mixed */ protected function getAttributeFromArray($key) if (isset($this->attributes<$key>)) return $this->attributes<$key>; 4. Tổng kếtVậy là sau đó 1 hồi suy đoán ta sẽ hiểu được tại sao model instance này lại linh hoạt thực hiện được cú pháp của array. Thực ra mã sản phẩm instance trả về 1 object nhưng bởi implements ArrayAccess nên rất có thể sử dụng cú pháp array. Nội dung bài viết đồng thời được đăng bên trên blog cá thể của mình.

Lời cuối xin cảm ơn chúng ta đã đọc nội dung bài viết của mình. Bài tiếp sau mình sẽ chỉ ra xem Laravel đã kết nối với DB như thế nào?

Share Tweet Linkedin Pinterest
Previous Post

Almacenar y recuperar una imagen de una base de datos mysql mediante php

Next Post

Compare value in array php

CÙNG CHUYÊN MỤC

form register php

Form register php

09/04/2021
fantastic blog (cms) in php with source code

Fantastic blog (cms) in php with source code

28/04/2021
validate form php javascript

Validate form php javascript

28/04/2021
http diendanlequydon com viewtopic php style 6

Http diendanlequydon com viewtopic php style 6

28/04/2021
phần mềm lập trình php tốt nhất

Phần mềm lập trình php tốt nhất

01/07/2022
ghi file trong php

Ghi file trong php

30/06/2022
thực tập part time php hà nội

Thực tập part time php hà nội

30/06/2022
test preg_match online

Test preg_match online

30/06/2022

Newsletter

The most important automotive news and events of the day

We won't spam you. Pinky swear.

Chuyên Mục

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ

News Post

  • #5 cách check icloud đơn giản, chính xác, dễ thực hiện

About

Chúng tôi tạo ra trang web nhằm mục đích mang lại kiến thức bổ ích cho cộng đồng, các bài viết được sưu tầm từ nhiều nguồn trên internet giúp mang lại kiến thức khách quan dành cho bạn

©2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng

Liên Hệ - Giới Thiệu - Nội Quy - Bảo Mật

No Result
View All Result
  • Trang chủ
  • Chuyên mục
    • Hỏi Đáp
    • Kiến Thức
    • Sức Khỏe
    • Tử Vi
    • Công Nghệ
  • Lưu trữ
  • Liên hệ

© 2022 darkedeneurope.com - Website WordPress vì mục đích cộng đồng.