Làm cách nào để gọi một hàm lớp trong PHP?

Cảnh báo. call_user_func_array[] hy vọng tham số 1 là một cuộc gọi lại hợp lệ, thành viên mảng đầu tiên không phải là tên lớp hoặc đối tượng hợp lệ

indeed if I call directly ‘three::init_three’ it works?… I am asking because also on Stackoverflow I saw samples using array[, ‘’]…..

Cảm ơn rất nhiều trước
Chúc mừng

Đang xem 2 trả lời - 1 đến 2 [trong tổng số 2]

  • Người kiểm duyệt bcworkz

    [@bcworkz]

    Bạn đã trộn lẫn loại yếu tố bạn đang sử dụng. init_three[] không phải là một lớp, nó chỉ là một hàm. Nó có thể được đề cập trực tiếp. Không có gì để khởi tạo với new. Tôi thậm chí không chắc từ khóa static có gì bên ngoài khai báo lớp. Theo một nghĩa nào đó, tất cả các chức năng thủ tục là "tĩnh"

    Vì mục đích thảo luận, giả sử init_three[] đã được khai báo bên trong lớp three. Sau đó, bạn có thể làm $three_obj = new three[];. Nhưng $three_obj là một đối tượng lớp. Ngoài ra, các lớp tĩnh không cần phải được khởi tạo [nhưng chúng tôi lạc đề]. Những gì bạn cần để thêm một trang menu là tên lớp. Vì vậy, lớp one của bạn sẽ cần gán một giá trị cho thuộc tính

    class static one {
       public static $three = 'three';
       //etc....
    }
    0 để giá trị của nó có sẵn khi bạn thêm một trang menu

    class static one {
       public static $three = 'three';
       //etc....
    }

    Nhưng sau đó, để tham chiếu một thuộc tính như vậy, bạn vẫn phải bao gồm tham chiếu lớp

    class static one {
       public static $three = 'three';
       //etc....
    }
    1
    Nhưng lý tưởng nhất là bạn cũng định nghĩa một phương thức lấy thuộc tính và sử dụng phương thức đó để tìm nạp giá trị

    Nếu bạn chỉ muốn làm

    class static one {
       public static $three = 'three';
       //etc....
    }
    2, thì bạn phải gán cho
    class static one {
       public static $three = 'three';
       //etc....
    }
    0 một giá trị theo thủ tục, bên ngoài lớp

    Đây là cách dễ nhất để gọi một phương thức Hàm hoặc Lớp một cách linh hoạt, với Tên từ một Chuỗi, được lưu trữ vào một biến hoặc mục mảng
    - Bấm vào mã để chọn

    1. Gọi hàm với tên được lưu vào một biến sử dụng. $variable[$parameters]


    2. Calling function with name stored into a string in array item use: $array["key"][$parameters]
    'getSum', 'f2'=>'hi'];
    
    // calls the functions with name from $arr array
    $sum = $arr['f1'][12, 89];
    
    echo $sum;      // 101
    echo $arr['f2'][];      // Hello Friend
    

    3. Gọi phương thức lớp có tên từ chuỗi trong biến [thêm biến có tên phương thức trong " {} "]
    $object->{$variable}[$parameter]
    {$method}['coursesweb.net/'];
    
    echo $val;      // //coursesweb.net/
    

    4. Gọi phương thức lớp với tên từ chuỗi trong mục mảng [thêm mục mảng với tên phương thức trong " {} "]
    $object->{$array['key']}[$parameters]
    'getSum', 'm2'=>'hi'];
    
    $obC = new Cls;
    $sum = $obC->{$mts['m1']}[12, 89];
    $msg = $obC->{$mts['m2']}[];
    
    echo $sum;      // 101
    echo $msg;      // Hello Friend
    

    Lập trình hướng đối tượng là một cách tiếp cận lập trình trong đó các đối tượng và lớp được sử dụng. Ngày nay Java và C ++ chủ yếu được sử dụng cho lập trình hướng đối tượng. Phạm vi lập trình hướng đối tượng trong PHP 4 bị hạn chế, nhưng trong PHP 5, mô hình đối tượng đã được viết lại để có hiệu suất tốt hơn và nhiều tính năng hơn. Bây giờ PHP 5 có một mô hình đối tượng đầy đủ

    nội dung

    Đối tượng là gì?

    Ý tưởng cơ bản đằng sau một ngôn ngữ hướng đối tượng là bao gồm một nhóm các biến và hàm thành một đơn vị duy nhất và giữ cho cả biến và hàm an toàn khỏi sự can thiệp và lạm dụng từ bên ngoài. Một đơn vị như vậy được gọi là đối tượng tác động lên dữ liệu. Cơ chế liên kết dữ liệu và chức năng với nhau được gọi là đóng gói. Tính năng này giúp dễ dàng sử dụng lại mã trong các dự án khác nhau. Các chức năng được khai báo trong một đối tượng cung cấp cách truy cập dữ liệu. Các chức năng của một đối tượng được gọi là các phương thức và tất cả các phương thức của một đối tượng đều có quyền truy cập vào các biến được gọi là các thuộc tính
    Hình ảnh sau đây cho thấy các thành phần của một đối tượng

     

    Tầng lớp

    Trong lập trình hướng đối tượng, một lớp là một cấu trúc hoặc nguyên mẫu mà từ đó các đối tượng được tạo ra. Một lớp định nghĩa các thành viên cấu thành cho phép các thể hiện của lớp có trạng thái và hành vi. Các thành viên trường dữ liệu cho phép một đối tượng lớp duy trì trạng thái và các phương thức cho phép hành vi của đối tượng lớp. Hình ảnh sau đây cho thấy các thành phần của một lớp

     

    PHP. Tạo các lớp và Khởi tạo

    • Định nghĩa lớp bắt đầu với từ khóa lớp, theo sau là tên lớp, sau đó là một tập hợp các dấu ngoặc nhọn [{}] bao quanh các hằng, biến [được gọi là "thuộc tính"] và các hàm [được gọi là "phương thức"] thuộc về lớp
    • Tên lớp hợp lệ [không bao gồm các từ dành riêng] bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc dấu gạch dưới nào
    • Tên lớp thường bắt đầu bằng một chữ hoa để phân biệt chúng với các định danh khác
    • Một thể hiện là một đối tượng đã được tạo ra từ một lớp hiện có
    • Tạo một đối tượng từ một lớp hiện có được gọi là khởi tạo đối tượng
    • Để tạo một đối tượng từ một lớp, phải sử dụng từ khóa mới
    • Các lớp nên được xác định trước khi khởi tạo

    Thí dụ

    ________số 8_______

    Trong ví dụ sau, từ khóa mới được sử dụng để khởi tạo một đối tượng. Ở đây $myobj đại diện cho một đối tượng của lớp Myclass

    
    

    Hãy xem nội dung của lớp Myclass sử dụng hàm var_dump[] [hiển thị thông tin có cấu trúc [loại và giá trị] về một hoặc nhiều biến]

    
    

    đầu ra

    object[Myclass]#1 [0] { }

    Xem ví dụ trên trình duyệt

    Đặt thuộc tính

    • Các biến thành viên của lớp được gọi là thuộc tính. Đôi khi chúng được gọi là thuộc tính hoặc trường
    • Các thuộc tính chứa dữ liệu cụ thể và liên quan đến lớp mà nó đã được xác định
    • Khai báo một thuộc tính trong một lớp là một nhiệm vụ dễ dàng, sử dụng một trong các từ khóa công khai, được bảo vệ hoặc riêng tư theo sau là khai báo biến thông thường. Nếu khai báo bằng var [tương thích với PHP 4] thì thuộc tính sẽ được định nghĩa là public
      • công cộng. Thuộc tính có thể được truy cập từ bên ngoài lớp, bằng tập lệnh hoặc từ lớp khác
      • riêng. Không có quyền truy cập nào được cấp từ bên ngoài lớp, bởi tập lệnh hoặc từ một lớp khác
      • được bảo vệ. Không có quyền truy cập nào được cấp từ bên ngoài lớp trừ một lớp là con của lớp có thuộc tính hoặc phương thức được bảo vệ
    • nowdocs [ kể từ PHP 5. 3. 0] có thể được sử dụng trong bất kỳ ngữ cảnh dữ liệu tĩnh nào, bao gồm cả khai báo thuộc tính

    Thí dụ

    Sau khi một đối tượng được khởi tạo, bạn có thể truy cập thuộc tính của một lớp bằng toán tử đối tượng và ->. Bất kỳ thành viên nào được khai báo với từ khóa "riêng tư" hoặc "được bảo vệ" đều không thể được truy cập bên ngoài phương thức của lớp

    
    

    đầu ra

    10

    Xem ví dụ trên trình duyệt

    Ghi chú. Có một lỗi phổ biến là sử dụng nhiều hơn một ký hiệu đô la khi truy cập các biến. Trong ví dụ trên sẽ không có ký hiệu $ trước font_size [ echo $f->font_size ].

    Sau khi xác định các phương thức, chúng ta sẽ thảo luận về một ví dụ với các thuộc tính lớp công khai, riêng tư và được bảo vệ

    Phương pháp cài đặt

    • Các hàm được khai báo trong một lớp được gọi là các phương thức
    • Một phương thức lớp hoàn toàn giống với các hàm PHP
    • Khai báo một phương thức trong một lớp là một nhiệm vụ dễ dàng, sử dụng một trong các từ khóa công khai, được bảo vệ hoặc riêng tư theo sau là tên phương thức
      • công cộng. Phương thức có thể được truy cập từ bên ngoài lớp
      • riêng. Không có quyền truy cập được cấp từ bên ngoài lớp học
      • được bảo vệ. Không có quyền truy cập nào được cấp từ bên ngoài lớp trừ một lớp là con của lớp có thuộc tính hoặc phương thức được bảo vệ
    • Tên phương thức hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc dấu gạch dưới nào
    • Phần thân của phương thức được đặt trong một cặp dấu ngoặc nhọn chứa mã. Dấu ngoặc nhọn mở [ { ] biểu thị phần đầu của mã phương thức và dấu ngoặc nhọn đóng [ } ] biểu thị phần cuối của phương thức
    • Nếu phương thức không được xác định bởi công khai, được bảo vệ hoặc riêng tư thì mặc định là công khai
    • Có thể truy cập các thuộc tính và phương thức của phiên bản hiện tại bằng cách sử dụng $this [Định dạng $this->property] cho thuộc tính không tĩnh

    Thí dụ

    Sau khi một đối tượng được khởi tạo, bạn có thể truy cập phương thức của một lớp bằng toán tử đối tượng và ->. Trong ví dụ sau, phương thức custom_print[] sẽ in một chuỗi có kích thước và màu phông chữ cụ thể trong phần tử đoạn html với sự trợ giúp của câu lệnh php echo

    
    

    đầu ra

     

    Xem ví dụ trên trình duyệt

    Bây giờ hãy thay đổi giá trị của font_size, font_color và chuỗi, đồng thời kiểm tra xem phương thức custimize_print[] trả về kết quả gì.

    
    

    đầu ra

     

    Xem ví dụ trên trình duyệt

    PHP. Toán tử phân giải phạm vi [. ]

    Trong PHP, toán tử phân giải phạm vi còn được gọi là Paamayim Nekudotayim có nghĩa là "dấu hai chấm" hoặc "chấm kép hai lần" trong tiếng Do Thái. Dấu hai chấm [. ], là mã thông báo cho phép truy cập vào các thuộc tính hoặc phương thức tĩnh, hằng và bị ghi đè của một lớp

    PHP. Hằng số lớp

    • Một thực thể đặc biệt vẫn cố định trên cơ sở lớp riêng lẻ
    • Tên hằng không có dấu đô la [$] đứng trước như khai báo biến thông thường
    • Các giao diện cũng có thể bao gồm các hằng số
    • Khi gọi một hằng số lớp bằng cách sử dụng $classname. cú pháp không đổi, tên lớp thực sự có thể là một biến
    • Kể từ PHP 5. 3, bạn có thể truy cập hằng số lớp tĩnh bằng tham chiếu biến [Ví dụ. tên lớp. $varConstant]

    Định nghĩa và sử dụng hằng số

    
    

    Hiểu các thuộc tính công cộng, riêng tư, được bảo vệ

    Các thuộc tính có thể là công khai, riêng tư hoặc được bảo vệ. Công khai có nghĩa là các thuộc tính có thể được truy cập ở mọi nơi, riêng tư có nghĩa là các thuộc tính có thể được truy cập bởi lớp xác định thành viên và được bảo vệ có nghĩa là các thuộc tính chỉ có thể được truy cập trong chính lớp đó và bởi các lớp cha và kế thừa

    Thí dụ

    Hiểu các phương thức công khai, riêng tư, được bảo vệ

    Các phương thức có thể là công khai, riêng tư hoặc được bảo vệ. Công khai có nghĩa là các phương thức có thể được truy cập ở mọi nơi, riêng tư có nghĩa là các phương thức có thể được truy cập bởi lớp xác định thành viên và được bảo vệ có nghĩa là các phương thức chỉ có thể được truy cập trong chính lớp đó và bởi các lớp kế thừa và lớp cha

    
    
    0

    Ghi chú. PHP sử dụng tính kế thừa trong mô hình đối tượng của nó và khi bạn mở rộng một lớp, lớp con sẽ kế thừa tất cả các phương thức công khai và được bảo vệ từ lớp cha. Khi chúng ta thảo luận về thừa kế, bạn sẽ có thêm thông tin về các thuộc tính và phương thức được bảo vệ

    Các phương thức Trình xây dựng PHP

    • Hàm tạo là một phương thức tích hợp đặc biệt, được thêm vào PHP 5, cho phép các nhà phát triển khai báo cho các lớp
    • Hàm tạo cho phép khởi tạo thuộc tính đối tượng [ i. e. các giá trị của thuộc tính] khi một đối tượng được tạo
    • Các lớp có phương thức khởi tạo tự động thực thi khi một đối tượng được tạo
    • Phương thức 'xây dựng' bắt đầu bằng hai dấu gạch dưới [__]
    • Hàm tạo không bắt buộc nếu bạn không muốn chuyển bất kỳ giá trị thuộc tính nào hoặc thực hiện bất kỳ hành động nào khi đối tượng được tạo
    • PHP chỉ gọi một hàm tạo

    Cú pháp chung để khai báo hàm tạo như sau

    hàm __construct[[đối số1, đối số2,. , đối sốN]]
    {
    /* Mã khởi tạo lớp */
    }
    Loại đối số1, đối số2,. , đối sốN được trộn lẫn

    Thí dụ

    
    
    1

    đầu ra

     

    Xem ví dụ trên trình duyệt

    Thêm ví dụ về hàm tạo

    Giống như các thuộc tính, các hàm tạo có thể gọi các phương thức của lớp hoặc các hàm khác. Trong ví dụ sau, không cần gọi riêng phương thức [sau khi tạo đối tượng và truyền tham số, xem ví dụ trước] vì nó đã được khai báo trong hàm tạo. Xem ví dụ sau

    
    
    2

    đầu ra

     

    Xem ví dụ trên trình duyệt

    Các phương thức hàm hủy PHP

    • Hàm hủy là đối tác của hàm tạo
    • Hàm hủy được gọi khi đối tượng bị hủy
    • Hàm hủy sẽ dọn sạch mọi tài nguyên được phân bổ cho một đối tượng sau khi đối tượng bị hủy
    • Hàm hủy thường được gọi theo hai cách. Khi một tập lệnh kết thúc hoặc xóa thủ công một đối tượng bằng hàm unset[]
    • Phương thức 'hàm hủy' bắt đầu bằng hai dấu gạch dưới [__]

    Cú pháp chung để khai báo hàm hủy như sau

    chức năng __destroy
    {
    /* Mã khởi tạo lớp */
    }
    Loại đối số1, đối số2,. , đối sốN được trộn lẫn

    Thí dụ

    
    
    3

    đầu ra

    
    
    4

    Xem ví dụ trên trình duyệt

    PHP. Sử dụng nhiều phiên bản của cùng một lớp

    Trong ví dụ sau, chúng tôi đã tạo nhiều đối tượng [thể hiện] của cùng một lớp và chuyển các giá trị khác nhau

    
    
    5

    đầu ra

     

    Xem ví dụ trên trình duyệt

    PHP. spl_autoload_register[]

    Nhiều nhà phát triển viết các ứng dụng hướng đối tượng tạo một tệp nguồn PHP cho mỗi định nghĩa lớp. Một trong những điều khó chịu nhất là phải viết một danh sách dài các mục cần thiết ở đầu mỗi tập lệnh [một mục cho mỗi lớp]. Theo truyền thống, hàm __autoload[] được sử dụng để tự động tải các lớp. Kể từ PHP 5. 1. 2 một hàm mới spl_autoload_register[] được giới thiệu cung cấp một giải pháp thay thế linh hoạt hơn cho các lớp tự động tải. Vì lý do này, việc sử dụng __autoload[] không được khuyến khích và có thể không được dùng nữa hoặc bị xóa trong tương lai

    cú pháp

    
    
    6

    Tham số

    NameDescriptionautoload_functionChức năng autoload đang được đăng ký. Nếu không có tham số nào được cung cấp, thì việc triển khai mặc định của spl_autoload[] sẽ được đăng ký. throwThông số này chỉ định liệu spl_autoload_register[] có ném ngoại lệ khi không thể đăng ký autoload_function hay không. prependNếu đúng, spl_autoload_register[] sẽ thêm bộ nạp tự động vào ngăn xếp tự động nạp thay vì nối thêm vào

    Giá trị trả về

    Trả về TRUE nếu thành công hoặc FALSE nếu thất bại

    Bạn có thể sử dụng hàm spl_autoload_register[] theo cách sau

    
    
    7

    Thí dụ

    Lúc đầu, chúng tôi sẽ tạo hai lớp và lưu trữ chúng trong đường dẫn /php/classes-objects/resource

    lớp 1. php

    
    
    8

    lớp 2. php

    
    
    9

    Bây giờ, hãy tạo một chuỗi in tệp. php và lưu nó vào /php/classes-objects

    
    
    0

    Trong ví dụ trên, chúng tôi đang cố gắng tạo hai đối tượng, trong đó tên lớp là 'lớp 1' [lưu trong /php/classes-objects/resource/class 1. php] và 'class2' [lưu trong /php/classes-objects/resource/class2. php]. PHP chuyển tên này dưới dạng một chuỗi tới spl_autoload_register[], cho phép bạn chọn biến và sử dụng nó để "bao gồm" lớp/tệp thích hợp

    đầu ra

     

    Xem ví dụ trên trình duyệt

    PHP. Di sản

    • Kế thừa là một nguyên tắc lập trình được thiết lập tốt
    • Kế thừa cho phép các lớp tạo thành một hệ thống phân cấp giống như cây gia đình
    • Cho phép các lớp con chia sẻ các phương thức và thuộc tính [công khai hoặc được bảo vệ] của lớp cha của nó
    • Lớp cha là lớp cha
    • Một lớp con có thể thêm các thuộc tính và phương thức
    • Kế thừa cho phép sử dụng lại mã

     

    Thí dụ

    Trong lớp con ví dụ sau, 'Mysubclass' kế thừa tất cả các thuộc tính được bảo vệ và phương thức công khai từ lớp 'Myclass'. Ngoài ra, chúng tôi thêm thuộc tính text-decoration trong câu lệnh echo trong phân lớp 'Mysubclass'

    
    
    1

    đầu ra

     

    Xem ví dụ trên trình duyệt

    PHP. giao diện

    • Cung cấp các phương pháp để thực hiện
    • Các lớp dẫn xuất có thể triển khai nhiều hơn một giao diện
    • Các giao diện có thể kế thừa từ các giao diện khác bằng cách sử dụng từ khóa mở rộng
    • Tất cả các phương thức được coi là công khai trong định nghĩa giao diện có thể được định nghĩa rõ ràng là công khai hoặc ngầm định
    • Khi một lớp thực hiện nhiều giao diện, không thể có bất kỳ xung đột đặt tên nào giữa các phương thức được định nghĩa trong các giao diện khác nhau

    cú pháp

    
    
    2

    PHP. Nhân bản đối tượng

    • Nhân bản được sử dụng để tạo một bản sao của một đối tượng
    • Một bản sao đối tượng được tạo bằng cách sử dụng từ khóa clone
    • Khi một đối tượng được nhân bản, PHP 5 sẽ thực hiện một bản sao nông của tất cả các thuộc tính của đối tượng
    • Bất kỳ thuộc tính nào là tham chiếu đến các biến khác, sẽ vẫn là tham chiếu
    • PHP cung cấp một phương thức đặc biệt __clone để sao chép một đối tượng
    • Khi quá trình nhân bản hoàn tất, nếu một phương thức __clone[] được xác định, thì phương thức __clone[] của đối tượng mới được tạo sẽ được gọi, để cho phép bất kỳ thuộc tính cần thiết nào cần được thay đổi

    Thí dụ

    Trong PHP, nhân bản đối tượng được thực hiện bằng cách sử dụng từ khóa clone. Đây là một ví dụ về nhân bản đối tượng

    Thí dụ. Nhân bản đối tượng bằng phương pháp ma thuật __clone

    
    
    3

    đầu ra

    
    
    4

    Xem ví dụ trên trình duyệt

    PHP. phương pháp ma thuật

    Tên hàm __construct[], __desturation[], __call[], __callStatic[], __get[], __set[], __isset[], __unset[], __sleep[], __wakeup[], __toString[], __invoke[] . PHP bảo lưu tất cả các tên hàm bắt đầu bằng __ như một điều kỳ diệu

    Chúng ta đã thảo luận về các phương thức __construct[], __destroy[] và __clone[]

    Dưới đây là các phương pháp ma thuật khác

    __gọi[]

    __call[] được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh đối tượng

    cú pháp. __call hỗn hợp công khai [ chuỗi $name , mảng $arguments ]

    __callStatic[]

    __callStatic[] được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh tĩnh

    cú pháp. __call hỗn hợp công khai [ chuỗi $name , mảng $arguments ]

    __được[]

    __get[] được sử dụng để đọc dữ liệu từ các thuộc tính không thể truy cập

    cú pháp. __get hỗn hợp công khai [ chuỗi $name ]

    __bố trí[]

    __set[] được chạy khi ghi dữ liệu vào các thuộc tính không thể truy cập

    cú pháp. public void __set [ string $name , hỗn hợp $value ]

    __isset[]

    __isset[] được kích hoạt bằng cách gọi isset[] hoặc empty[] trên các thuộc tính không thể truy cập

    cú pháp. bool công khai __isset [ chuỗi $name ]

    __unset[]

    __unset[] được gọi khi unset[] được sử dụng trên các thuộc tính không thể truy cập

    cú pháp. khoảng trống công khai __unset [ chuỗi $name ]

    __ngủ[]

    __sleep[] được sử dụng để chuyển giao dữ liệu đang chờ xử lý hoặc thực hiện các tác vụ dọn dẹp tương tự. Ngoài ra, chức năng này rất hữu ích nếu bạn có các đối tượng rất lớn không cần phải lưu hoàn toàn

    cú pháp. mảng công khai __sleep [ void ]

    __thức dậy[]

    __wakeup[] được sử dụng để thiết lập lại bất kỳ kết nối cơ sở dữ liệu nào có thể đã bị mất trong quá trình tuần tự hóa và thực hiện các tác vụ khởi tạo lại khác

    Làm cách nào để gọi một hàm từ một lớp PHP?

    Nếu bạn muốn gọi từ func1, hãy sử dụng $this->func2[]; để gọi từ bên ngoài lớp, hãy sử dụng $object-

    Làm thế nào để gọi lớp trong PHP?

    PHP. Hằng số lớp . hằng số $classname :: constant cú pháp, tên lớp thực sự có thể là một biến. Kể từ PHP 5. 3, bạn có thể truy cập hằng số lớp tĩnh bằng tham chiếu biến [Ví dụ. tên lớp. $varConstant].

    Làm thế nào để gọi một hàm trong PHP?

    Có hai phương pháp để thực hiện việc này. Một là trực tiếp gọi hàm theo tên biến sử dụng dấu ngoặc và tham số và cách còn lại là sử dụng hàm call_user_func[] nhưng trong cả hai phương thức đều sử dụng tên biến. call_user_func[ $var ];

    Bạn có thể gọi một lớp trong một hàm không?

    Trong Python, các lớp, hàm và thể hiện của các lớp đều có thể được sử dụng làm “các hàm gọi được” .

Chủ Đề