Ответы пользователя по тегу Программирование
  • Типы образуются от классов?

    нет, Java такое не должна собрать и должна сказать, что класс `Person` не найден

    искал описание в книге, но не нашел. опишу сам. здесь таится более глубокий вопрос

    вы верно мыслите - слева у вас стоит тип, а справа вы используете класс. в случае с классом, который ни от чего не наслудуется и от него ничего не наследуется тип - это и есть класс.

    далее представим, что у вас есть два класса Person и Worker. при этом Worker наследуется от Person. вы можете смело писать следующее:
    Person personFoo = new Person();
    Person personBar = new Worker();
    Worker workerBeez = new Worker();

    с первой и третьей строкой все ясно, а вторая строка, как вы понимаете, из-за полиморфизма. объекты personFoo и personBar будут принадлежать одному типу: Person. все эти три объекта формально будут принадлежать к одному типу и workerBeez можно использовать там же, где и Person если соблюден принцип подстановки

    аналогичная ситуация с интерфейсами. если же класс реализует интерфейс, то объекты этого класса будут относиться еще и к типу интерфейса:
    IWorkable worker = new Worker(); // при условии, что Worker реализует интерфейс IWorkable


    теперь если все это собрать в кучу, то класс, которые наследуется от другого класса и реализует несколько интерфейсов, по сути относится к нескольким типам: к типу, который относится к классу, от которого он наследуется, к типам всех интерфейсов и к собственному типу
    Ответ написан
    Комментировать
  • Зачем писать такой большой код?

    добавлю к вышесказанному: такой код проще тестировать
    Ответ написан
    Комментировать
  • Как "пройти" по ключам массива?

    для этого узкого примера как-то так:
    $array = array(
      'one' => 'hi',
      'two' => 'privet',
      'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
    );
    
    $str = 'three|three_1';
    
    $keys = explode("|", $str);
    
    var_dump($array[$keys[0]][$keys[1]]);


    Updated 1:
    <?php
    
    function foo($array, $str){
    	$keys = explode('|', $str);
    	
    	$keysCount = count($keys);
    	
    	$result = $array;
    	for($i = 0; $i < $keysCount; $i++){
    		if(!is_array($result) && $i < ($keysCount - 1)){
    			throw new Exception("Array depth not expected");
    		}
    		
    		if(!isset($result[$keys[$i]])){
    			throw new Exception(sprintf("Key '%s' not found", $keys[$i]));
    		}
    		
    		$result = $result[$keys[$i]];
    	}
    	
    	return $result;
    }
    
    $array = array(
      'one' => 'hi',
      'two' => 'privet',
      'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
    );
    
    $str = 'three|three_1';
    
    var_dump(foo($array, $str));
    Ответ написан
    4 комментария