Criando variáveis de marionetes com base nas condições

3

Então, estou me ajustando às variáveis imutáveis na marionete, agora procurando alguns conselhos, ou esclarecendo se eu já estou no caminho certo.

Eu tenho um diretório que gostaria de sincronizar, mas potencialmente um número de subdiretórios dele. Então eu gostaria de construir uma matriz de um ou mais caminhos para passar para um recurso arquivo recursivo. Idealmente, eu teria algo parecido com isto

$paths = ['fist/path'] # assume this is provided via class parameter
# this should work, since it's only overriding what was provided from higher scope
if($condition) {
  $paths += 'second/path'
}
# this won't fly, since $paths has already been set once locally
if($another_condition) {
  $paths += 'third/path'
}

mas eu não posso fazer isso, certo, já que as variáveis são imutáveis. O que eu tenho como uma abordagem 'melhor' até agora é algo como isto

$paths = ['fist/path']
if($condition) {
  $condition_1_path = ['second/path']
} else {
  $condition_1_path = []
}
if($another_condition) {
  $condition_2_path = ['third/path']
} else {
  $condition_2_path = []
}

$paths = concat($paths, $condition_1_path, $condition_2_path)

Não tenho certeza se concat omitirá uma entrada do resultado se for fornecida uma matriz vazia para um de seus argumentos, mas aguardando para testar isso assim que eu descubra como obter stdlib carregado .

De qualquer maneira, olhando para este código, para mim, é simplesmente hediondo. Existe uma maneira mais limpa de fazer algo assim?

    
por quickshiftin 12.09.2013 / 20:01

1 resposta

4

É feio, mas eu fiz assim.

if($condition) {
  $condition_1_path = 'first/path'
} else {
  $condition_1_path = ''
}
if($another_condition) {
  $condition_2_path = 'second/path'
} else {
  $condition_2_path = ''
}

# split into array based on whitespace
$mylistofpaths = split("$condition_1_path $condition_2_path", '\s+')
    
por 12.09.2013 / 20:18

Tags