Hướng dẫn php constructor same name as class - phương thức tạo php trùng tên với lớp

Có thể trùng lặp: Hàm __Construct được sử dụng để làm gì?
what is the function __construct used for?

Có bất kỳ sự khác biệt nào giữa hàm __construct và chức năng có cùng tên với lớp có không?

class foo {
    function foo ($something){
        echo "I see ".$something." argument";
    }
}

class bar {
    function __construct ($something){
        echo "
I see ".$something." argument again"; } } $foo = new foo("foo"); $bar = new bar("bar");

Hướng dẫn php constructor same name as class - phương thức tạo php trùng tên với lớp

hỏi ngày 29 tháng 7 năm 2011 lúc 12:16Jul 29, 2011 at 12:16

2

Phương pháp có tên là cách thực hiện một hàm tạo PHP4.

Đối với khả năng tương thích ngược, nếu PHP 5 không thể tìm thấy hàm __construct () cho một lớp nhất định, nó sẽ tìm kiếm chức năng cấu trúc kiểu cũ, theo tên của lớp. Thực tế, điều đó có nghĩa là trường hợp duy nhất có vấn đề tương thích là nếu lớp có phương thức có tên __construct () được sử dụng cho các ngữ nghĩa khác nhau.old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.

Kể từ Php 5.3.3, các phương thức có cùng tên với phần tử cuối cùng của tên lớp theo tên sẽ không còn được coi là hàm tạo. Thay đổi này không ảnh hưởng đến các lớp không có tên. This change doesn't affect non-namespaced classes.

http://www.php.net/manual/en/language.oop5.decon.php

Đã trả lời ngày 29 tháng 7 năm 2011 lúc 12:18Jul 29, 2011 at 12:18

DamiendamienDamien

5,8292 Huy hiệu vàng28 Huy hiệu bạc35 Huy hiệu Đồng2 gold badges28 silver badges35 bronze badges

4

Hàm Constructor có tên giống như lớp là tính năng tương thích ngược cho PHP4. Nó sẽ không hoạt động với các lớp học theo tên kể từ Php 5.3.3

Nếu cả hai hàm __constructclass-named đều có mặt, thì __construct được sử dụng làm hàm tạo.

Đã trả lời ngày 29 tháng 7 năm 2011 lúc 12:19Jul 29, 2011 at 12:19

MchlmchlMchl

60,6K9 Huy hiệu vàng114 Huy hiệu bạc119 Huy hiệu đồng9 gold badges114 silver badges119 bronze badges

Cái đầu tiên là "Cấu trúc" kiểu PHP4 cũ. Nó về cơ bản giống như __construct.

Đã trả lời ngày 29 tháng 7 năm 2011 lúc 12:19Jul 29, 2011 at 12:19

Hướng dẫn php constructor same name as class - phương thức tạo php trùng tên với lớp

Mchlmchlshaggy

60,6K9 Huy hiệu vàng114 Huy hiệu bạc119 Huy hiệu đồng2 gold badges15 silver badges15 bronze badges

Cái đầu tiên là "Cấu trúc" kiểu PHP4 cũ. Nó về cơ bản giống như __construct.

Đã trả lời ngày 29 tháng 7 năm 2011 lúc 12:18Jul 29, 2011 at 12:18

DamiendamienTJHeuvel

5,8292 Huy hiệu vàng28 Huy hiệu bạc35 Huy hiệu Đồng3 gold badges37 silver badges46 bronze badges

3

Hàm Constructor có tên giống như lớp là tính năng tương thích ngược cho PHP4. Nó sẽ không hoạt động với các lớp học theo tên kể từ Php 5.3.3

Đã trả lời ngày 29 tháng 7 năm 2011 lúc 12:18Jul 29, 2011 at 12:18

DamiendamienMichael J.V.

5,8292 Huy hiệu vàng28 Huy hiệu bạc35 Huy hiệu Đồng1 gold badge19 silver badges16 bronze badges

0

Người xây dựng

__construct (hỗn hợp ...$values = ""): VOID(mixed ...$values = ""): void

PHP cho phép các nhà phát triển khai báo các phương thức xây dựng cho các lớp. Các lớp có phương thức xây dựng gọi phương thức này trên mỗi đối tượng mới được tạo, do đó, nó phù hợp với bất kỳ khởi tạo nào mà đối tượng có thể cần trước khi nó được sử dụng.

Lưu ý: Các hàm tạo cha mẹ không được gọi là ngầm nếu lớp con định nghĩa một hàm tạo. Để chạy một hàm tạo cha mẹ, một cuộc gọi đến cha mẹ :: __ construct () trong hàm tạo con là bắt buộc. Nếu trẻ không định nghĩa một hàm tạo thì nó có thể được kế thừa từ lớp cha giống như một phương thức lớp bình thường (nếu nó không được tuyên bố là riêng tư).: Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required. If the child does not define a constructor then it may be inherited from the parent class just like a normal class method (if it was not declared as private).

Ví dụ số 1 người xây dựng trong kế thừa

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}

class

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>

Không giống như các phương thức khác, __construct () được miễn trừ khỏi các quy tắc tương thích chữ ký thông thường khi được mở rộng.

Các hàm tạo là các phương pháp thông thường được gọi trong quá trình khởi tạo đối tượng tương ứng của chúng. Như vậy, chúng có thể xác định một số lượng đối số tùy ý, có thể được yêu cầu, có thể có một loại và có thể có giá trị mặc định. Các đối số của hàm tạo được gọi bằng cách đặt các đối số trong ngoặc đơn sau tên lớp.

Ví dụ #2 sử dụng các đối số của hàm tạo

__construct0

__construct1

__construct2

Nếu một lớp không có hàm tạo, hoặc hàm tạo không có đối số bắt buộc, dấu ngoặc đơn có thể bị bỏ qua.

Nhà xây dựng kiểu cũ

Trước Php 8.0.0, các lớp trong không gian tên toàn cầu sẽ diễn giải một phương pháp được đặt tên giống như lớp như một hàm tạo kiểu cũ. Cú pháp đó không được chấp nhận và sẽ dẫn đến lỗi __construct3 nhưng vẫn gọi chức năng đó là một hàm tạo. Nếu cả __construct () và một phương thức cùng tên được xác định, __construct () sẽ được gọi.__construct3 error but still call that function as a constructor. If both __construct() and a same-name method are defined, __construct() will be called.

Trong các lớp theo tên, hoặc bất kỳ lớp nào là của Php 8.0.0, một phương pháp có tên giống như lớp không bao giờ có bất kỳ ý nghĩa đặc biệt nào.

Luôn luôn sử dụng __construct () trong mã mới.

Mới trong khởi tạo

Kể từ Php 8.1.0, các đối tượng có thể được sử dụng làm giá trị tham số mặc định, các biến tĩnh và hằng số toàn cầu, cũng như trong các đối số thuộc tính. Các đối tượng cũng có thể được truyền để xác định () ngay bây giờ.define() now.

Ghi chú::

Việc sử dụng tên lớp động hoặc không chuỗi hoặc lớp ẩn danh không được phép. Việc sử dụng giải nén đối số không được phép. Việc sử dụng các biểu thức không được hỗ trợ làm đối số không được phép.

Ví dụ số 4 sử dụng mới trong bộ khởi tạo

__construct4

__construct5

__construct6

Phương pháp tạo tĩnh

PHP chỉ hỗ trợ một hàm tạo đơn cho mỗi lớp. Tuy nhiên, trong một số trường hợp, có thể mong muốn cho phép một đối tượng được xây dựng theo những cách khác nhau với các đầu vào khác nhau. Cách được khuyến nghị để làm như vậy là bằng cách sử dụng các phương thức tĩnh làm trình bao gồm hàm tạo.

Ví dụ #5 sử dụng các phương thức tạo tĩnh

__construct7

__construct8

__construct9

Chất xây dựng có thể được làm riêng hoặc được bảo vệ để ngăn chặn nó được gọi là bên ngoài. Nếu vậy, chỉ có một phương pháp tĩnh sẽ có thể khởi tạo lớp. Bởi vì chúng nằm trong cùng một định nghĩa lớp, họ có quyền truy cập vào các phương thức riêng tư, ngay cả khi không có cùng một thể hiện đối tượng. Hàm tạo riêng là tùy chọn và có thể hoặc không có ý nghĩa tùy thuộc vào trường hợp sử dụng.

Ba phương pháp tĩnh công khai sau đó chứng minh các cách khác nhau để khởi tạo đối tượng.

  • class-named0 có các tham số chính xác cần thiết, sau đó tạo đối tượng bằng cách gọi hàm tạo và trả về kết quả.
  • class-named1 chấp nhận chuỗi JSON và thực hiện một số xử lý trước trên chính nó để chuyển đổi nó thành định dạng mong muốn của hàm tạo. Sau đó, nó trả về đối tượng mới.
  • class-named2 chấp nhận chuỗi XML, tiền xử lý và sau đó tạo một đối tượng trần. Hàm tạo vẫn được gọi, nhưng vì tất cả các tham số là tùy chọn phương thức bỏ qua chúng. Sau đó, nó gán các giá trị cho các thuộc tính đối tượng trực tiếp trước khi trả về kết quả.

Trong cả ba trường hợp, từ khóa class-named3 được dịch thành tên của lớp, mã được sử dụng. Trong trường hợp này là class-named4.

Người phá hủy

__destruct (): Void(): void

PHP sở hữu một khái niệm phá hủy tương tự như các ngôn ngữ hướng đối tượng khác, chẳng hạn như C ++. Phương pháp phá hủy sẽ được gọi ngay khi không có tài liệu tham khảo nào khác đến một đối tượng cụ thể hoặc theo bất kỳ thứ tự nào trong chuỗi tắt.

Ví dụ #6 Ví dụ về Destruction

class-named5

class-named6

class-named7

Giống như các nhà xây dựng, các hàm hủy của cha mẹ sẽ không được gọi là ngầm bởi động cơ. Để chạy một kẻ hủy diệt cha mẹ, người ta sẽ phải gọi rõ ràng cha mẹ :: __ sestruct () trong cơ thể phá hủy. Cũng giống như các nhà xây dựng, một lớp con có thể thừa hưởng chất hủy diệt của cha mẹ nếu nó không tự thực hiện một.parent::__destruct() in the destructor body. Also like constructors, a child class may inherit the parent's destructor if it does not implement one itself.

Bộ hủy sẽ được gọi ngay cả khi việc thực thi tập lệnh được dừng bằng EXIT (). Gọi EXIT () trong một bộ hủy sẽ ngăn các thói quen tắt còn lại thực thi.exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing.

Ghi chú::

Destructor được gọi trong quá trình tắt kịch bản đã được gửi tiêu đề HTTP. Thư mục làm việc trong giai đoạn tắt tập lệnh có thể khác với một số SAPIs (ví dụ: Apache).

Ghi chú::

Destructor được gọi trong quá trình tắt kịch bản đã được gửi tiêu đề HTTP. Thư mục làm việc trong giai đoạn tắt tập lệnh có thể khác với một số SAPIs (ví dụ: Apache).

Cố gắng ném một ngoại lệ từ một kẻ phá hủy (được gọi trong thời gian chấm dứt kịch bản) gây ra lỗi nghiêm trọng.

David Dot Scourfield tại Llynfi Dot Co Dot Uk ¶

class-named8

class-named9

__construct0

__construct1

__construct2

11 năm trước

mmulej tại gmail dot com ¶

__construct3

__construct4

__construct5

__construct6

__construct7

__construct8

7 tháng trước

Domger tại Freenet Dot de ¶

__construct9

__construct0

__construct1

__construct2

__construct8

5 năm trước

IWWP tại Outlook Dot Com ¶

__construct4

__construct5

__construct6

__construct7

__construct8

__construct9

function foo()0

__construct8

2 năm trước

lách ¶

function foo()2

function foo()3

function foo()4

function foo()5

function foo()6

function foo()7

function foo()8

function foo()9

...$values0

__construct8

13 năm trước

prieler tại ABM Dot tại ¶

...$values2

...$values3

...$values4

...$values5

15 năm trước

Yousef Ismaeil cliprz [at] gmail [dot] com ¶

...$values6

...$values7

...$values8

9 năm trước

Mỗi Persson ¶

...$values9

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
0

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
1

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
2

10 năm trước

Jonathon Hibbard ¶

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
3

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
4

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
5

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
6

12 năm trước

Bolshun tại Mail Dot Ru ¶

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
7

14 năm trước

Bolshun tại Mail Dot Ru ¶

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
8

class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}
9

class0

class1

class2

class3

...$values7

class5

class6

class7

class8

class9

__construct8

14 năm trước

David tại Synatree Dot Com ¶

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
1

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
2

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
3

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
4

__construct8

ziggy khi bắt đầu chấm bụi ¶

1 tháng trước

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
6

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
7

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
8

SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

class

OtherSubClass extends BaseClass {
    
// inherits BaseClass's constructor
}// In BaseClass constructor
$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();// In BaseClass constructor
$obj = new OtherSubClass();
?>
9

__construct00

Reza Mahjourian ¶

16 năm trước

__construct01

__construct02

__construct03

__construct04

__construct05

__construct06

__construct07

__construct08

__construct8

Một hàm tạo có thể là cùng tên với một lớp?

Các hàm tạo có cùng tên với lớp-tên của hàm tạo của lớp hình chữ nhật là hình chữ nhật (), tên của hàm tạo của lớp luồng là Thread (), v.v. Java hỗ trợ quá tải tên phương thức để một lớp có thể có bất kỳ số lượng hàm tạo nào có cùng tên.--the name of the Rectangle class's constructor is Rectangle() , the name of the Thread class's constructor is Thread() , and so on. Java supports method name overloading so a class can have any number of constructors all of which have the same name.

Làm thế nào để bạn sửa chữa các phương thức không dùng nữa với cùng tên với lớp của họ sẽ không phải là hàm tạo trong phiên bản PHP trong tương lai?

Thông điệp không dùng nữa xảy ra vì bạn có một lớp với một hàm tạo kiểu cũ.Để giải quyết lỗi, hãy thay thế tên hàm của hàm tạo bằng __construct.Và thông báo không dùng nữa sẽ biến mất khi bạn chạy lại tập lệnh PHP.replace the constructor function name with __construct . And the deprecated message should disappear when you rerun the PHP script.

Làm thế nào để bạn gọi một hàm tạo lớp trong PHP?

Để gọi hàm tạo của lớp cha từ hàm tạo của lớp con, bạn sử dụng cú pháp của cha mẹ :: __ Construct (arguments).Cú pháp để gọi hàm tạo cha mẹ giống như một phương thức thông thường.parent::__construct(arguments) syntax. The syntax for calling the parent constructor is the same as a regular method.

Lớp PHP có thể có nhiều hàm tạo không?

Lưu ý: PHP thiếu hỗ trợ để khai báo nhiều hàm tạo của các số tham số khác nhau cho một lớp không giống như các ngôn ngữ như Java.PHP lacks support for declaring multiple constructors of different numbers of parameters for a class unlike languages such as Java.