Hướng dẫn what is new static in php? - static mới trong php là gì?

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 selfnew 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 selfnew 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.BoltClock

Trong ví dụ sau,

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[]]];
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
string[1] "B"
string[1] "B"
0].155 gold badges1362 silver badges1335 bronze badges

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:Rain

Phả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

Tĩnh mới làm gì?

Tĩnh mới khởi tạo một đối tượng mới từ lớp hiện tại và hoạt động với các ràng buộc tĩnh muộn [khởi tạo lớp con nếu lớp được phân nhóm, tôi mong bạn hiểu điều đó]. Có một phương thức tĩnh trên một lớp trả về một thể hiện mới của giống nhau là một hàm tạo thay thế.instantiates a new object from the current class, and works with late static bindings [instantiates the subclass if the class was subclassed, I expect you understand that]. Having a static method on a class which returns a new instance of same is an alternative constructor.

Tĩnh trong PHP là gì?

Từ khóa tĩnh được sử dụng để khai báo các thuộc tính và phương thức của một lớp là tĩnh.Các thuộc tính và phương thức tĩnh có thể được sử dụng mà không tạo ra một thể hiện của lớp.Từ khóa tĩnh cũng được sử dụng để khai báo các biến trong một hàm giữ giá trị của chúng sau khi hàm kết thúc.used to declare properties and methods of a class as static. Static properties and methods can be used without creating an instance of the class. The static keyword is also used to declare variables in a function which keep their value after the function has ended.

Sự khác biệt giữa bản thân và tĩnh trong PHP là gì?

Self vs Static: Sự khác biệt cơ bản nhất giữa chúng là tự chỉ ra phiên bản thuộc tính của lớp mà nó được khai báo nhưng trong trường hợp tĩnh, tài sản trải qua một lần tái khai trong thời gian chạy.self points to the version of the property of the class in which it is declared but in case of static, the property undergoes a redeclaration at runtime.

Lớp tĩnh trong PHP là gì?

Giới thiệu: Một lớp tĩnh trong PHP là một loại lớp chỉ được khởi tạo một lần trong một chương trình.Nó phải chứa một thành viên tĩnh [biến] hoặc hàm thành viên tĩnh [phương thức] hoặc cả hai.Các biến và phương thức được truy cập mà không cần tạo một đối tượng, sử dụng toán tử phân giải phạm vi [: :].a type of class which is instantiated only once in a program. It must contain a static member [variable] or a static member function [method] or both. The variables and methods are accessed without the creation of an object, using the scope resolution operator[::].

Chủ Đề