我已经搜索了关于堆栈溢出的后期绑定的所有类似问题,我非常不同意任何将此问题标记为重复问题的人。首先,我在另一个问题上找到了这个例子,但我不明白我怎么知道什么时候在编译期间决定了某件事情,什么时候在运行时决定了一些事情。基本上,我问题的症结在于两件事:
在这个例子中,我必须得出这样的逻辑结论:一个方法是后期绑定,另一个方法是早期绑定。
如何知道何时在运行时或编译时决定要执行哪个版本的方法?
代码:
class A
{
public void foo()
{
System.out.println("Class A");
}
}
在PHP中,当在实例中使用时,和有什么不同?
示例:
class A {
function dump() {
echo get_called_class();
echo get_class($this);
}
}
class B extends A {}
$A = new A();
$B = new B();
$A->dump(); // output is 'AA'
$B->dump(); // output is 'BB'
这种情况有什么不同吗?
我应该在什么时候使用get_called_cl
今天我遇到了一些使用PHP后期静态绑定的代码,它的使用方式对我来说毫无意义。对我来说,后期的静态绑定是一个新的概念,所以我试图用它来包装我的头脑。
在研究了这个并阅读了这篇文章之后,我了解了晚静态绑定的功能以及为什么使用它。现在,我试图将它应用到我正在查看的代码中,这对我来说没有任何意义。它感觉static关键字被错误地使用。以下是我不太确定的代码:
<?php
class myClass
{
const MY_CONST = 'some string';
public function getMyConst()
这对我来说毫无意义:
class A {
public static $value = "a";
public static function get_value(){
return self::$value;
}
}
echo A::$value; // a, this makes sense
echo A::get_value(); // a, this makes sense
class B extends A {
public static $value = "b";
}
echo B:
我正在阅读php手册中关于LSB特性的内容,我知道它在静态环境下是如何工作的,但在非静态环境下我不太理解它。手册中的示例如下:
<?php
class A {
private function foo() {
echo "success!\n";
}
public function test() {
$this->foo();
static::foo();
}
}
class B extends A {
/* foo() will be copied to B, hence it
有人能解释一下为什么我会得到下面的结果吗?(请看评论)。
class A {
public function foo() { // foo from B
//private function foo() { // foo from A
echo "foo from A</br>";
}
public function test() {
$this->foo();
}
}
class B extends A {
public function foo()
我正在尝试用PHP编写以下代码
class A {
protected static $comment = "I am A" ;
public static function getComment () {
return self :: $comment;
}
}
class B extends A {
protected static $comment = "I am B" ;
}
echo B::getComment () ; // echoes "I am A"
它不应该返回I am B吗?在oop PHP中,子进程不会覆
我从一个网站获得了一个代码示例,但是我很难理解输出结果。我要分享这个密码:
class A
{
public static function foo()
{
static::who();
}
public static function who()
{
echo __CLASS__."\n";
}
}
class B extends A
{
public static function test()
{
A::foo();
parent::foo();
self::foo();
我正在尝试在类中创建一个方法,该方法将实例化当前在其中的类。但是,我也需要这个方法在所有扩展类中正确工作。正如我从中学到的,在这个任务中使用self关键字是不好的。所以很明显的选择是使用static关键字。
但是,我遇到了同样有效的不同方法。
示例:
class SimpleClass
{
private $arg;
public function __construct( $arg ){
$this->arg = $arg;
}
public function getArg(){return $this->arg;}
p
从Version5.3开始,PHP支持静态方法的。虽然它无疑是一个有用的特性,但只有几种情况下它的使用是必要的(例如,活动记录模式)。
考虑以下例子:
1.方便构造函数(**::create()**)
class SimpleObject
{
public function __construct() { /* ... */ }
public static function create()
{
return new static; // or: return new self;
}
}
如果这个类可以被扩展(但是,它不是由同一个包中的任何类扩
让我们从一些代码开始:
class Super {
protected static $color;
public static function setColor($color){
self::$color = $color;
}
public static function getColor() {
return self::$color;
}
}
class ChildA extends Super { }
class ChildB extends Super { }
ChildA::setColor(
基类:
class CoreModule {
private static $info;
public static function getModuleInfo($key=null){
//Notice: Undefined index: name
if($key) return self::$info[$key];
else return self::$info;
}
public static function getModuleName(){
return self::getMod
class parents {
public function __call( $name , $arguments ) {
var_dump( __CLASS__ );
}
public function test () {
var_dump( __CLASS__ );
}
}
class child extends parents{
public function __call( $name , $arguments ) {
var_dump( __CLASS__ );
}
public function test () {
var
使用PHP 5.3+,并具有与以下内容相等的内容,我得到的输出是'C‘而不是'B':
class A
{
public static function doSomething()
{
echo get_called_class();
}
}
class B extends A
{
public static function doMore()
{
self::doSomething();
}
}
class C extends B {}
C::doMore();
如果我使用static
正如标题所说,我正在尝试理解如何对构建类似于FuelPHP的框架进行单元测试(或者其他类型的测试),在该框架中,您可以利用静态调用来设置和访问所有内容。
这会导致如下代码:
class Appointment {
public static function updateStartTime($binds) {
$query = "UPDATE appointment SET start_time = :start_time
WHERE appointment_id = :appointment_id";
return DB::update
我有一个PHP类,如下所示:
class userAuthentication
{
public static function Authenticate()
{
if (isset($_COOKIE['email']))
{
verify($someVar, getPass($_COOKIE['email']);
}
}
public static function getPass($email)
{
}
public stati
我的目标是能够使用智能感知,同时仍然指示编译器生成后期绑定代码(即CallSites和绑定器)。
假设我有
class MyDynamicDataProvider
{
public int Data{get;set}
}
我想写下:
MyDynamicDataProvider provider = new MyDynamicDataProvider();
int x = provider.Data;
我希望数据属性调用是后期绑定的。然而,目前,如果我没有将provider变量声明为动态,编译器将预先绑定调用。即在运行时,将返回存储在属性的支持字段中的值。
同时,我希望在编码时使用智能感知
我正在用Xamppp在本地主机上测试我的PHP应用程序,一切都很好,但是当我将它导出到一个真正的服务器时,它不再工作了。我发现这是因为我的服务器不支持后期的静态绑定。我的服务器有版本5.2.17。
我知道这个错误。
<b>Parse error</b>: syntax error, unexpected T_STATIC in <b>/home/storage/f/9d/09/meuplacar/public_html/filme/work/class_lib.php</b> on line <b>555</b><
我正在使用Wordpress并需要实例化一个类似于这个过度简化的示例的新类(对于接收一些参数的add_action()钩子):
class A {
public function __construct() {
}
public static function init() {
$instance = new self();
$instance->doStuff();
}
protected function doStuff() {
以下两种说法有什么区别?我正在编写一个基本的VB.net代码,它创建了一个新的excel工作簿,并添加了一个新的工作表。两人似乎都在做同样的事情:
Dim oxl As Excel.Application
oxl = New Excel.Application
Dim oxl As Excel.Application
oxl = CreateObject("Excel.Application")
我注意到的唯一一点是,当我使用NEW时,VB.net编辑器会显示以下消息:“对象初始化可以简化”
有人能帮忙吗?
让我们上这门课
class A {
protected static function ident() { return "I am A"; }
public static function say() { return "I say '".self::ident()."'!"; }
}
然后,我需要扩展类A并覆盖ident(),如下所示
class B extends A {
protected static function ident() { return "I am B"; }
}
现在,当调用
我在以下代码行中收到一个编译错误:
Dim oXL As Excel.Application
代码在MS Access 2007的VB中。上行是用于生成MS Excel文件的段的开头。对我来说,最明显的答案是确保"Microsoft Office12.0对象库“在”工具“>”引用“下被选中。我已经这样做了,但错误仍然存在。Excel是否需要并排安装才能正常工作?我做错了什么?提前谢谢。
假设我创建了一个程序,上面有一个文本框和一个对文本框中的文本执行某些操作的按钮。
如何使程序COM可见,如何从另一个项目加载和自动执行该程序?
我的目标是能够使用COM自动化该程序:
Dim myProj as object = createObject("myProgram")
myProj.setText("Hello World")
myProj.buttonClickEvent()
类似于加载新的excel并通过互操作实现自动化:
dim xl as object = createobject("excel.application")
D
下面是我正在处理的类的简化版本
class A {
static protected function getVal() {
return self::$valB;
}
}
class B extend A {
static protected $valB = 'Hello';
}
B::getVal(); // Hello
这应该工作在php版本5.2.17,或我有它的设置错误。我最近收到一个错误,说找不到A::$valB。
这是我的班级宣言
abstract class person {
const NAME='person';
public static function get_name(){
return self::NAME;
}
abstract public function get_description();
}
class me extends person{
const NAME = "me";
public function get_description(){
return