572
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang chuyển đổi thư viện Php 5.3 để làm việc trên Php 5.2. Điều chính cản đường tôi là việc sử dụng ràng buộc tĩnh muộn như return new static[$options];
, nếu tôi chuyển đổi nó thành return new self[$options]
, tôi có nhận được kết quả tương tự không?
Sự khác biệt giữa new self
và new static
là gì?
Đã hỏi ngày 4 tháng 3 năm 2011 lúc 17:41Mar 4, 2011 at 17:41
MikemikeMike
11.9K16 Huy hiệu vàng61 Huy hiệu bạc86 Huy hiệu đồng16 gold badges61 silver badges86 bronze badges
0
Tôi sẽ nhận được kết quả tương tự?
Không thực sự. Mặc dù vậy, tôi không biết về một cách giải quyết cho Php 5.2.
Sự khác biệt giữa
new self
vànew static
là gì?
Đã hỏi ngày 4 tháng 3 năm 2011 lúc 17:41
Mikemike
11.9K16 Huy hiệu vàng61 Huy hiệu bạc86 Huy hiệu đồng
class A {
public static function get_self[] {
return new self[];
}
public static function get_static[] {
return new static[];
}
}
class B extends A {}
echo get_class[B::get_self[]]; // A
echo get_class[B::get_static[]]; // B
echo get_class[A::get_self[]]; // A
echo get_class[A::get_static[]]; // A
Tôi sẽ nhận được kết quả tương tự?
Không thực sự. Mặc dù vậy, tôi không biết về một cách giải quyết cho Php 5.2.6 gold badges50 silver badges71 bronze badges
class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
1 đề cập đến cùng một lớp trong đó từ khóa class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
2 thực sự được viết.Mar 4, 2011 at 18:19
class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
3, trong các ràng buộc tĩnh muộn của Php 5.3, đề cập đến bất kỳ lớp nào trong hệ thống phân cấp mà bạn gọi là phương thức trên.BoltClockTrong ví dụ sau,
4 kế thừa cả hai phương thức từ class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
5. Nhu cầu class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
1 được liên kết với class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
5 vì nó được xác định trong việc triển khai phương thức đầu tiên của ____ 15, trong khi class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
3 bị ràng buộc với lớp được gọi [cũng xem class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
0].155 gold badges1362 silver badges1335 bronze badgesstring[1] "B"
string[1] "B"
10
Mleko
class A {
public function create1[] {
$class = get_class[$this];
return new $class[];
}
public function create2[] {
return new static[];
}
}
class B extends A {
}
$b = new B[];
var_dump[get_class[$b->create1[]], get_class[$b->create2[]]];
10,9k6 Huy hiệu vàng 50 Huy hiệu bạc71 Huy hiệu Đồng
string[1] "B"
string[1] "B"
Đã trả lời ngày 4 tháng 3 năm 2011 lúc 18:19Jul 11, 2012 at 7:13
5
Boltclockboltclock
677K155 Huy hiệu vàng1362 Huy hiệu bạc1335 Huy hiệu Đồng
Nếu phương thức của mã này không tĩnh, bạn có thể nhận được công việc xung quanh 5.2 bằng cách sử dụng
string[1] "B"
string[1] "B"
1.Kết quả:
class Foo {
public $name = static::class;
}
$Foo = new Foo;
echo $Foo->name; // Fatal error
Đã trả lời ngày 11 tháng 7 năm 2012 lúc 7:13
class Foo {
public $name = self::class;
}
$Foo = new Foo;
echo $Foo->name; // Foo
Ngoài câu trả lời của người khác:
tĩnh :: sẽ được tính toán bằng thông tin thời gian chạy.Aug 24, 2018 at 9:07
Điều đó có nghĩa là bạn không thể sử dụng
string[1] "B"
string[1] "B"
2 trong thuộc tính lớp vì các giá trị thuộc tính:RainPhải có thể được đánh giá tại thời điểm biên dịch và không được phụ thuộc vào thông tin thời gian chạy.2 gold badges18 silver badges37 bronze badges
2