Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Javascript魔术方法_Php_Javascript - Fatal编程技术网

Php Javascript魔术方法

Php Javascript魔术方法,php,javascript,Php,Javascript,在php中,至少在我的实例中,使用魔术方法是非常常见的——至少在定义核心类时是如此,其他大部分内容都将从核心类扩展而来 php中的神奇方法以一种特殊的方式运行,与常规方法不同。 例如,在我的书中,最常用的方法之一是_构造() 每次加载类时都会执行构造。例如,如果你想让你的类自我介绍,你可以这样做: <?php class Person { function __construct($name) { $this->name = $name;

在php中,至少在我的实例中,使用魔术方法是非常常见的——至少在定义核心类时是如此,其他大部分内容都将从核心类扩展而来

php中的神奇方法以一种特殊的方式运行,与常规方法不同。 例如,在我的书中,最常用的方法之一是_构造()

每次加载类时都会执行构造。例如,如果你想让你的类自我介绍,你可以这样做:

<?php
class Person 
{
    function __construct($name)
    {
        $this->name = $name;
        $this->introduceYourself();
    }

    public function introduceYourself()
    {
        //if $this->name then echo $this->name else echo i dont have name
        echo $this->name ? "hi my name is " . $this->name : "error i dont have name";
    }
}

$dave = new Person('dave');
如果“magic”指的是隐式调用的方法,则Javascript具有
toString
valueOf

> foo = {toString: function() { return 'hi' }}
> foo + " there"
"hi there"

> foo = {valueOf: function() { return 100 }}
> foo - 5
95
然而,在当前的javascript版本中,没有标准的方法来重新定义操作符(php/python魔术方法实际上就是这么做的)。Harmony(Javascript 6)将包括这类工作。提供有关代理的示例和解释,下面是一个类似于php的
\uu get

var p = Proxy.create({
  get: function(proxy, name) {
    return 'Hello, '+ name;
  }
});
document.write(p.World); // should print 'Hello, World'

这已经在Firefox中起作用了,如果您转到
about:flags
并打开实验JavaScript,Chrome支持是可用的

JavaScript是为数不多的语言之一,Lua也是。如果您正在寻找
构造函数
,则将其命名为这样的构造函数(见下文)。JavaScript中的所有对象都派生自

实际上,您关于JavaScripts的所有答案——“方法”都已经包含在本文中。访问这个StackOverflow站点,了解更多关于JavaScript的语法和行为以及特性的信息,例如关于

下面是一些帮助您理解行为的实践示例(以及涉及JavaScript对象序列化和在PHP中导入它们时的循环引用)

0.构造函数
函数号(){[本机代码]}
0.构造函数(10)
>> 10
var myObj=function(){console.log(“我是一个新函数”);}
>>未定义
myObj.constructor
>>函数函数(){[本机代码]}
myObj.constructor()
>>函数匿名(){}
myObj.prototype.constructor()
>>我是一个新函数
myObj===myObj.prototype.constructor
>>真的
x=新的myObj
>>我是一个新函数
>我是一个新函数

可能的副本也可以看一看。可能的,但是没有人愿意回答或确认或否认我特别想要的。或者是一个“模拟”的解决方案。如果您转到
about:flags
并打开实验性JavaScript:),则可以使用Chrome支持。注意
Proxy
也可以做
\u call
所做的事情-通常JavaScript中的反射非常容易实现。
0 .constructor
function Number() { [native code] }

0 .constructor(10)
>> 10

var myObj = function(){ console.log("I am a new function"); }
>> undefined
myObj.constructor
>> function Function() { [native code] }
myObj.constructor()
>> function anonymous() {}
myObj.prototype.constructor()
>> I am a new function

myObj === myObj.prototype.constructor
>> true

x = new myObj
>> I am a new function
<< myObj {}

x.constructor()
>> I am a new function
<< undefined