10 экспериментов с php

Опубликовано 2014-03-06 04:58:09

Тест 1. Передача данных по ссылке.

[php]<?php

function byReference(&$variable = 5) {

++$variable;

}

$a = 12;

byReference($a);

echo $a;

/ ==================== /

class MyClass{

public $value;

}

$a = new MyClass;

$a->value = 1;

$b = $a;

$b->value = 2;

echo $a->value;

[/php]

Тест 2. Вызов неопределенного метода и использование магической функции __call

[php]<?php

class TestClass extends TestClassBase {

public function __call($method, $arguments)

{

    echo 'method: '.$method.PHP_EOL;

    return $this->$method($arguments[0]);

}

}

class TestClassBase {

protected function getUndefined($name) {

    echo $name.PHP_EOL;

}

}

$tc = new TestClass();

echo $tc->getUndefined('undef');

[/php]

Тест 3. Пример работы со строками

[php]<?php

$var1 = "10foos";

$var2 = "20 bars";

print "implode("", array($var1, $var2)) ".implode("", array($var1, $var2));

print "var1.var2 ".$var1.$var2;

print "var1 + var2 ". ($var1 + $var2);

[/php]

Тест 4. Как наследуются статические члены класса

[php]<?php

class Foo {

public static $my_static = 'foo';



public function staticValue() {

    return self::$my_static;

}

}

class Bar extends Foo {

public function fooStatic() {

    return self::$my_static;

}

}

print Bar::$my_static . "\n";

$bar = new Bar();

print $bar->fooStatic() . "\n";

print $bar->staticValue() . "\n";

[/php]

Тест 5. Задача из тестового задания

[php]<?php

$oranges = 10;

$apples = 5;

$string = "I have %d apples and %d oranges";

echo PHP_EOL;

printf($string, $apples, $oranges);

echo PHP_EOL;

print sprintf($apples, $oranges);

echo PHP_EOL;

sprintf($string, $oranges, $apples);

[/php]

Тест 6. Проверял как работает autoload

[php]<?php

spl_autoload_register(function ($class) {

include 'classes/' . $class . '.class.php';

});

$obj = new MyTestClass();

echo $obj->testVar;

[/php]

Тест 7. str и float

[php]<?php

$var1 = '0.0123';

if ($var1 > 0) {

echo PHP_EOL.'More'.PHP_EOL;

} else {

echo PHP_EOL.'Less'.PHP_EOL;

}

[/php]

Тест 8. Тестирование исключений. Был очень похожий пример в реальном коде

[php]<?php

class MyException extends Exception {

}

class TestException {

public static function testExc() {

    throw new MyException('MyException '. __CLASS__);

}

}

class Test2Exception {

public static function test2Exc() {

    TestException::testExc();

}

}

class Main {

public function methodMain() {

    try {

        Test2Exception::test2Exc();

    } catch (Exception $e) {

        echo $e->getMessage().PHP_EOL;

    }

}

}

$m = new Main();

$m->methodMain();

[/php]

Тест 9. merge и + для массивов

[php]<?php

$arr1 = array('comment1', array(1,2,3,4,5,6));

$arr2 = array('comment2', array(3,3,3,4,5,6));

echo 'arr1'.PHP_EOL;

print_r($arr1);

echo PHP_EOL.'arr2'.PHP_EOL;

print_r($arr2);



$m = array_merge($arr1, $arr2);

echo &quot;merge &quot;.PHP_EOL;

print_r($m);

$new2 = $arr1 + $arr2;

echo &quot;plus &quot;.PHP_EOL;

print_r($new2);

[/php]

Тест 10. Ленивая проверка. Если первое условие не выполнено, то второе не проверяется

[php]<?php

$arr = array('t1' => 0);

if($arr['t1'] AND $arr['t2']) {

echo 'not';

} else {

echo 'lazy';

}

[/php]