В PHP return излиза и от цикъл, и от функция.
Ако имаш return в цикъл, който е във функция, ще излезе и от двете, демек – от функцията направо.
В PHP return излиза и от цикъл, и от функция.
Ако имаш return в цикъл, който е във функция, ще излезе и от двете, демек – от функцията направо.
В PHP конструкторите и деструкторите не могат да са статични.
Гърми с Fatal: Constructors cannot be static…
int(10) има значение само ако полето има атрибут ZEROFILL.
Само тогава ще допълни стойността с 0 от ляво.
Ако подаваш стринг като входен параметър на метод/функция, който стринг е име на callback функция, може да го дефинираш като тип callable
function patapan(callable $func_name) { }
И в двата случая може да подаваш като стринг името на функцията, но „The difference is, that a Closure
must be an anonymous function, where callable
also can be a normal function“.
Друга важна разлика е, че Closure е predefined class , a callable
е тип.
The difference is, that a Closure
must be an anonymous function, where callable
also can be a normal function.
You can see/test this with the example below and you will see that you will get an error for the first one:
function callFunc1(Closure $closure) {
$closure();
}
function callFunc2(Callable $callback) {
$callback();
}
function xy() {
echo 'Hello, World!';
}
callFunc1("xy"); // Catchable fatal error: Argument 1 passed to callFunc1() must be an instance of Closure, string given
callFunc2("xy"); // Hello, World!
Литература:
Раздели 5 кокала на 3 кучета по равно, без да режеш кокалите и трябва и да са по равно за всяко куче.
Единственото възможно е на всяко куче по един кокал и остават 2 кокала неподелени.
Тези 2 кокала са въпросният остатък от целочислено делене.
Най-просто – float закръгля, защото няма зададена прецизност, както decimal и обикновено съдържа безкрайни дроби.
При decimal се знае, че 0.333 е точно 0.333, a не 0.33333333333…∞ закръглено до 0.333333334, или отрязано до някъде.
Затова decimal е най-пододящ например за съхраняване на парични суми.
Float is Approximate-number data type, which means that not all values in the data type range can be represented exactly , it round up the values.
Where as Decimal is Fixed-Precision data type, which means that all the values in the data type range can be represented exactly with precision and scale, it doesn’t round up the values.
Use decimal for counted values
Use float/double for measured values
Some examples:
We always count money and should never measure it. We usually measure distance. We often count scores.
Float се използва за сухраняване на стойности, които могат да бъдат закръглени поради това, че точната им стойност може и да не е ясна.
Decimal – обратното, трябва да знаем точно стойността, без закръгляне, без „отрязване“. С конкретна точност.
В JS явно няма overriding, защото ако предифинираш (оверрайднеш) функция, както по-долу, JS ще хойстне втората над първата.
function bar(){ return 111; } function bar(a){ return a; } alert(bar()); alert(bar(999));
Ще алертне първо undefined после 999 , защото ще използва втората функция.
JavaScript evaluates expressions from left to right. Different sequences of one and the same operands can produce different results:
var x = 16 + 4 + „Volvo“; // x becomes „20Volvo“
and
var x = „Volvo“ + 16 + 4; // x becomes „Volvo164“
In JavaScript, a variable without a value, has the value undefined. Its type /typeof()/ is also undefined.
var car; // Value is undefined, type is undefined
Any variable can be emptied, by setting the value to undefined. The type will also be undefined.
car = undefined; // Value is undefined, type is undefined
В JS като изтриеш елемент на масив, мястото му остава празно, а length не му се променя
var ccc = [111, 222, 333, 444];
console.log(ccc);
(4) [111, 222, 333, 444]
length:4
delete ccc[2];
console.log(ccc);
(4) [111, 222, empty × 1, 444]
length:4
До колкото разбрах, причините са исторически – още от първите версии на JS, променливите имали тип и стойност. Типът бил някакъв системен код, който код, специално за типа „обект“ бил 0.
Обаче и самата стойност NULL в JS се представяла като 0.
И така се получило нещо като съвпадение.
(function(w){ w.propEdno = 100; w.metoEdno = function(){ alert(w.propEdno * 100); metoDve(); this.metoTri(); }; var propDve = 200; var metoDve = function(){ alert(propDve * 200); }; this.propTri = 300; this.metoTri = function(){ alert(propDve * this.propTri * 300); }; })(window);
// Ще алертне 10000, после 40000, после 18000000
window.metoEdno();
// Ще алертне 18000000
window.metoTri();
// Ще алертне 300
alert(window.propTri);
Демек, тези които са this.* са пъблик.
()();
(function(){})();
(function(w){
w.propEdno = 100;
w.metoEdno = function(){
alert(w.propEdno * 100);
};
var propDve = 200;
var metoDve = function(){
alert(this.propDve * 100);
};
this.propTri = 300;
this.metoTri = function(){
alert(this.propTri * 100);
};
})(window);
window.metoEdno();
window.metoDve();
window.metoTri(); metoTri(); this.metoTri();
window.metoEdno(); ще алертне 10,000, защото така metoEdno() и propEdno стават метод и пропърти на window обекта.
propDve и window.metoDve(); са private и ще дадат грешка от рода на Uncaught TypeError: window.metoDve is not a function… Те не могат да се викат отвън.
window.metoTri(); metoTri(); this.metoTri(); ще алертне 30,000 три пъти, защото:
1. първият път metoTri() и propTri стават public част от window обектът;
2. вторият път и двете стават public – от глобалният скоуп;
3. третия път this прави metoTri() и propTri също public.