Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
new stdClass в PHP.$object = new stdClass();
$object->a = 1;
$object->b = 2;
$object->c = 3;
method()->arrayKey
$.hashCount = function(hash) {
var count = 0;
$.each(hash, function() {
count++;
});
return count;
};
var test = {a: 1, b: 2};
console.log( test['a'] + ' ' + test['b'] );
$obj = new stdclass;
$obj->some_property = 'lalala';
function some_func($obj) {
$obj = new stdclass;
}
function another_func_with_link(&$obj) {
$obj = new stdclass;
}
some_func($obj); // $obj не изменился
another_func_with_link($obj); // у $obj пропали все свойства
$foo = $obj = new stdclass;
$obj->some_property = 'lalala';
function some_func($obj) {
$obj->test = 123;
}
function another_func_with_link(&$obj) {
$obj = new stdclass;
}
some_func($obj->test); // $obj изменился
another_func_with_link($foo); // у $obj все свойства на месте
another_func_with_link($obj); // содержимое переменной $obj - другое
some_func($obj)?One of the key-points of PHP5 OOP that is often mentioned is that «objects are passed by references by default». This is not completely true.
если по-вашему никак, то давайте что ли ассемблер с php и javascript сразу будем сравнивать
по сути это был шаблонизатор-переросток
function Table(table_legs_num) { this.table_legs = table_legs.num; }
t = new Table(5);
function SquareTable() {}
SquareTable.prototype = t;
t1 = new SquareTable();
alert(t1.table_legs);
t.table_legs = 3;
alert(t1.table_legs);
class One:
X = 1;
class Two (One):
pass
obj = Two()
print(obj.X); // 1
One.X = 2;
print(obj.X); // 2
class One
def x; 1; end
end
class Two < One; end
obj = Two.new
puts obj.x # 1
One.class_eval { def x; 2; end }
puts obj.x # 2
<?php
$arr = array(
'key1' => 'value1',
'key2' => 'value2',
);
function doSmthWithArray(&$arr) {
$arr['key3'] = 'value3';
}
doSmthWithArray($arr);
print_r($arr); // выводит Array ( [key1] => value1 [key2] => value2 [key3] => value3 )
?>
var x = 5
function zzz(y) {
y = 10
}
alert('x: ' + x)
zzz(x)
alert('x: ' + x)
for(var i = 0; i < 10; i++) funcs.push( function(i) { return function() { return i; } }(i) );
var i={"c":undefined};
var funcs=[];
for (var c =0; c<10; ++c){
i.c=c;
funcs.push( function(i) { return function() { return i.c; } }(i) );
}
for (var c =0; c<10; ++c){ console.log(funcs[c]()) }class test { };
$i = new test();
for($c = 0; $c < 10; $c++) { $i->c = $c;$funcs[] = function() use($i) { return $i->c; }; };
foreach($funcs as $func) echo $func().",";
$funcs = array();
$i = new test();
for($c = 0; $c < 10; $c++) { $i->c = $c;$funcs[] = function() use(&$i) { return $i->c; }; };
foreach($funcs as $func) echo $func().",";
function(i) { return function() { return i.c; } }(i)<?php
$var = '';
for($i = 0; $i < 100000; $i++) $var .= 'megalongstr111';
String.prototype.change = function (index, value) {
return this.slice(0, index) + value + this.slice(index + 1);
};
var a = '01234';
a = a.change(0, 'Z'); // "Z1234"
a; // "Z1234"Пишу всякую ерунду. В основном на PHP, иногда также на русском языкеЖелаю вам не писать ерунды и глубже подойти к изучению JavaScript — судя по вашей статье вы его совсем знаете. Если был резок в своих высказываниях — прошу простить, задели вы меня своей статьёй.
Ждем от вас «Отличие Haskell от PHP», «Отличие SQL от PHP», «Отличие Иврита от PHP».
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}Но ради одного такого «бонуса» придется отказаться от обратной совместимости (сейчас действует политика совместимости со старыми версиями).'pewpew'[0] = 'P' невозможно без кардинальных изменений в всем JavaScript. Потому, что строка в JavaScript — примитивный тип и то, что у строки можно вызывать методы на самом деле «магия» интерпретатора, который делает следующее:// Ваш код
var a = 'abc';
var b = a.toUpperCase();
console.log(a, b); // "abc", "ABC"
// Интерпретатор понимает его как
var a = 'abc';
// Создает временный объект. Метод toUpperCase вызывается у временного объекта.
var temp_a = new String(a);
var b = temp_a.toUpperCase();
free(temp_a); // такой функции нет, она для примера
console.log(a, b); // "abc", "ABC"
// Ваш код
var a = 'abc';
a[0] = 'A';
console.log(a); // "abc"
// Интерпретатор понимает его как
var a = 'abc';
// Создает временный объект. Переменная [0] создается у временного объекта
var temp_a = new String(a);
temp_a[0] = 'A';
free(temp_a); // такой функции нет, она для примера
console.log(a); // "abc"
'pewpew'[0] = 'P' невозможно без кардинальных изменений.Если применить здравый смысл и исходить из того, что разработчики PHP не лыком шиты. То можно сделать нехитрые выводы:
1. Если такая фича есть — значит она нужна
2. Если вы собираетесь менять символ в строке — это нормально. Строка по сути представляет собой C-подобный фиксированный массив и мы можем обращаться к её копонентам как в роли R-value, так и L-value.
function count(arr){ return Object.keys(arr).length}
Отличие Javascript от PHP